From 2f9e3297ab3259ec719468c70765b94ccbd3c03f Mon Sep 17 00:00:00 2001 From: lxyer <237809796@qq.com> Date: Sun, 19 Aug 2018 23:57:02 +0800 Subject: [PATCH] . --- apidoc.html | 110 - apidoc.json | 1 - conf/application.xml | 37 +- conf/persistence.xml | 10 +- root/404.html | 19 - root/admin/index.html | 11 - .../layui/css/modules/layim/html/chatlog.html | 96 - .../layui/css/modules/layim/html/find.html | 38 - .../layui/css/modules/layim/html/getmsg.json | 87 - .../layui/css/modules/layim/html/msgbox.html | 208 - root/res/layui/css/modules/layim/layim.css | 2 - .../layui/css/modules/layim/mobile/layim.css | 2 - root/res/layui/css/modules/layim/skin/1.jpg | Bin 18386 -> 0 bytes root/res/layui/css/modules/layim/skin/2.jpg | Bin 11883 -> 0 bytes root/res/layui/css/modules/layim/skin/3.jpg | Bin 18610 -> 0 bytes root/res/layui/css/modules/layim/skin/4.jpg | Bin 39279 -> 0 bytes root/res/layui/css/modules/layim/skin/5.jpg | Bin 33379 -> 0 bytes .../res/layui/css/modules/layim/skin/logo.jpg | Bin 3284 -> 0 bytes .../layui/css/modules/layim/voice/default.mp3 | Bin 13823 -> 0 bytes .../css/modules/layim/voice/default_1.mp3 | Bin 9341 -> 0 bytes root/res/layui/lay/modules/layim.js | 3 - root/res/layui/lay/modules/rate.js | 2 - root/res/wangEditor/fonts/w-e-icon.woff | Bin 6224 -> 0 bytes root/res/wangEditor/wangEditor.css | 411 -- root/res/wangEditor/wangEditor.js | 4674 ----------------- root/res/wangEditor/wangEditor.min.css | 1 - root/res/wangEditor/wangEditor.min.js | 4 - root/res/wangEditor/wangEditor.min.js.map | 1 - src/com/lxyer/bbs/mail/MailService.java | 13 - src/com/lxyer/bbs/weixin/WeiXinService.java | 84 - src/com/lxyer/redim/RedbbsListener.java | 16 - .../lxyer/redim/impl/ImFriendServiceImpl.java | 119 - .../lxyer/redim/impl/ImMsgServiceImpl.java | 93 - tmp/excel/tmp_cp.xls | 1 - work_redbbs.md | 68 - 35 files changed, 34 insertions(+), 6077 deletions(-) delete mode 100644 apidoc.html delete mode 100644 apidoc.json delete mode 100644 root/404.html delete mode 100644 root/admin/index.html delete mode 100644 root/res/layui/css/modules/layim/html/chatlog.html delete mode 100644 root/res/layui/css/modules/layim/html/find.html delete mode 100644 root/res/layui/css/modules/layim/html/getmsg.json delete mode 100644 root/res/layui/css/modules/layim/html/msgbox.html delete mode 100644 root/res/layui/css/modules/layim/layim.css delete mode 100644 root/res/layui/css/modules/layim/mobile/layim.css delete mode 100644 root/res/layui/css/modules/layim/skin/1.jpg delete mode 100644 root/res/layui/css/modules/layim/skin/2.jpg delete mode 100644 root/res/layui/css/modules/layim/skin/3.jpg delete mode 100644 root/res/layui/css/modules/layim/skin/4.jpg delete mode 100644 root/res/layui/css/modules/layim/skin/5.jpg delete mode 100644 root/res/layui/css/modules/layim/skin/logo.jpg delete mode 100644 root/res/layui/css/modules/layim/voice/default.mp3 delete mode 100644 root/res/layui/css/modules/layim/voice/default_1.mp3 delete mode 100644 root/res/layui/lay/modules/layim.js delete mode 100644 root/res/layui/lay/modules/rate.js delete mode 100644 root/res/wangEditor/fonts/w-e-icon.woff delete mode 100644 root/res/wangEditor/wangEditor.css delete mode 100644 root/res/wangEditor/wangEditor.js delete mode 100644 root/res/wangEditor/wangEditor.min.css delete mode 100644 root/res/wangEditor/wangEditor.min.js delete mode 100644 root/res/wangEditor/wangEditor.min.js.map delete mode 100644 src/com/lxyer/bbs/mail/MailService.java delete mode 100644 src/com/lxyer/bbs/weixin/WeiXinService.java delete mode 100644 src/com/lxyer/redim/RedbbsListener.java delete mode 100644 src/com/lxyer/redim/impl/ImFriendServiceImpl.java delete mode 100644 src/com/lxyer/redim/impl/ImMsgServiceImpl.java delete mode 100644 tmp/excel/tmp_cp.xls delete mode 100644 work_redbbs.md diff --git a/apidoc.html b/apidoc.html deleted file mode 100644 index d78c84e..0000000 --- a/apidoc.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - 接口文档(apidoc生成) - - - - - - - - - diff --git a/apidoc.json b/apidoc.json deleted file mode 100644 index d718544..0000000 --- a/apidoc.json +++ /dev/null @@ -1 +0,0 @@ -{"servers":[{"address":"0.0.0.0:80","servlets":[{"urlregs":["/","/project"],"moduleid":0,"name":"","comment":"首页一级菜单入口","mappings":[{"url":"/","auth":false,"actionid":0,"comment":"社区首页","params":[],"results":[],"result":"Object"},{"url":"/project","auth":false,"actionid":0,"comment":"项目首页","params":[],"results":[],"result":"Object"},{"url":"/site","auth":false,"actionid":0,"comment":"网站首页","params":[],"results":[],"result":"Object"}]},{"urlregs":["/jie","/jie/*","/column","/column/*"],"moduleid":0,"name":"","comment":"文章帖子入口","mappings":[{"url":"/column","auth":false,"actionid":0,"comment":"帖子栏目","params":[],"results":[],"result":"Object"},{"url":"/jie","auth":false,"actionid":0,"comment":"问答列表","params":[],"results":[],"result":"Object"},{"url":"/jie/add","auth":true,"actionid":0,"comment":"发表/编辑问答","params":[{"name":"#","radix":10,"type":"int","src":"PARAMETER","comment":"内容ID","required":true}],"results":[],"result":"Object"},{"url":"/jie/detail","auth":false,"actionid":0,"comment":"问答详情","params":[],"results":[],"result":"Object"}]},{"urlregs":["/os/comment/save","/os/comment/support","/os/comment/query"],"moduleid":0,"name":"","comment":"评论服务","mappings":[{"url":"/os/comment/query","auth":false,"actionid":0,"comment":"查询评论","params":[{"name":"sessionid","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true},{"name":"contentId","radix":10,"type":"int","src":"PARAMETER","comment":"","required":true},{"name":"flipper","radix":10,"type":"org.redkale.source.Flipper","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"org.redkale.util.Sheet"},{"url":"/os/comment/save","auth":true,"actionid":0,"comment":"评论保存","params":[{"name":"sessionid","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true},{"name":"bean","radix":10,"type":"com.lxyer.bbs.comment.Comment","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"org.redkale.service.RetResult"},{"url":"/os/comment/support","auth":true,"actionid":0,"comment":"点赞","params":[{"name":"sessionid","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true},{"name":"commentid","radix":10,"type":"int","src":"PARAMETER","comment":"","required":true},{"name":"ok","radix":10,"type":"int","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"org.redkale.service.RetResult"}]},{"urlregs":["/os/content/*"],"moduleid":0,"name":"","comment":"文章帖子服务","mappings":[{"url":"/os/content/collect","auth":true,"actionid":0,"comment":"帖子收藏","params":[{"name":"sessionid","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true},{"name":"contentid","radix":10,"type":"int","src":"PARAMETER","comment":"","required":true},{"name":"ok","radix":10,"type":"int","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"org.redkale.service.RetResult"},{"url":"/os/content/collectquery","auth":true,"actionid":0,"comment":"收藏列表","params":[{"name":"sessionid","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"org.redkale.util.Sheet"},{"url":"/os/content/info","auth":false,"actionid":0,"comment":"帖子详情","params":[{"name":"sessionid","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true},{"name":"contentid","radix":10,"type":"int","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"com.lxyer.bbs.content.ContentInfo"},{"url":"/os/content/query","auth":false,"actionid":0,"comment":"内容列表","params":[{"name":"flipper","radix":10,"type":"org.redkale.source.Flipper","src":"PARAMETER","comment":"","required":true},{"name":"actived","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true},{"name":"sessionid","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"org.redkale.util.Sheet"},{"url":"/os/content/save","auth":true,"actionid":0,"comment":"帖子保存","params":[{"name":"bean","radix":10,"type":"com.lxyer.bbs.content.Content","src":"PARAMETER","comment":"","required":true},{"name":"sessionid","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"org.redkale.service.RetResult"},{"url":"/os/content/set","auth":true,"actionid":0,"comment":"便捷的修改内容","params":[{"name":"sessionid","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true},{"name":"id","radix":10,"type":"int","src":"PARAMETER","comment":"","required":true},{"name":"field","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true},{"name":"v","radix":10,"type":"short","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"org.redkale.service.RetResult"},{"url":"/os/content/t","auth":false,"actionid":0,"comment":"测试HttpScope 模板使用","params":[{"name":"sessionid","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"org.redkale.net.http.HttpScope"}]},{"urlregs":["/os/file/upload"],"moduleid":0,"name":"","comment":"文件服务","mappings":[{"url":"/os/file/upload","auth":true,"actionid":0,"comment":"文件上传","params":[{"name":"tmpFile","radix":10,"type":"java.io.File","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"org.redkale.service.RetResult"}]},{"urlregs":["/os/user/*"],"moduleid":0,"name":"","comment":"用户服务","mappings":[{"url":"/os/user/changepwd","auth":true,"actionid":0,"comment":"修改密码","params":[{"name":"sessionid","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true},{"name":"pass","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true},{"name":"nowpass","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"org.redkale.service.RetResult"},{"url":"/os/user/current","auth":true,"actionid":0,"comment":"","params":[{"name":"sessionid","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"com.lxyer.bbs.base.user.UserInfo"},{"url":"/os/user/info","auth":true,"actionid":0,"comment":"用户信息","params":[{"name":"userid","radix":10,"type":"int","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"com.lxyer.bbs.base.user.UserInfo"},{"url":"/os/user/lastReg","auth":true,"actionid":0,"comment":"","params":[],"results":[],"result":"org.redkale.util.Sheet"},{"url":"/os/user/login","auth":false,"actionid":0,"comment":"登录校验","params":[{"name":"bean","radix":10,"type":"com.lxyer.bbs.base.user.LoginBean","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"org.redkale.service.RetResult"},{"url":"/os/user/logout","auth":false,"actionid":0,"comment":"退出登录","params":[{"name":"sessionid","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"org.redkale.service.RetResult"},{"url":"/os/user/query","auth":false,"actionid":0,"comment":"用户数据查询","params":[{"name":"flipper","radix":10,"type":"org.redkale.source.Flipper","src":"PARAMETER","comment":"","required":true},{"name":"bean","radix":10,"type":"com.lxyer.bbs.base.user.UserBean","src":"PARAMETER","comment":"过滤条件","required":true}],"results":[],"result":"org.redkale.util.Sheet"},{"url":"/os/user/register","auth":false,"actionid":0,"comment":"用户注册","params":[{"name":"bean","radix":10,"type":"com.lxyer.bbs.base.user.UserRecord","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"org.redkale.service.RetResult"},{"url":"/os/user/update","auth":true,"actionid":0,"comment":"用户信息修改","params":[{"name":"sessionid","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true},{"name":"bean","radix":10,"type":"com.lxyer.bbs.base.user.UserRecord","src":"PARAMETER","comment":"","required":true},{"name":"columns","radix":10,"type":"java.lang.String[]","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"org.redkale.service.RetResult"},{"url":"/os/user/usercount","auth":false,"actionid":0,"comment":"用户数据统计","params":[],"results":[],"result":"java.lang.Number"}]},{"urlregs":["/os/wx/verifyMPURL"],"moduleid":0,"name":"","comment":"微信管理","mappings":[{"url":"/os/wx/verifyMPURL","auth":false,"actionid":0,"comment":"微信域名验证","params":[{"name":"msgSignature","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true},{"name":"timeStamp","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true},{"name":"nonce","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true},{"name":"echoStr","radix":10,"type":"java.lang.String","src":"PARAMETER","comment":"","required":true}],"results":[],"result":"long"}]},{"urlregs":["/upload","/upload/*"],"moduleid":0,"name":"","comment":"文件管理入口","mappings":[{"url":"/upload/img","auth":false,"actionid":0,"comment":"图片上传","params":[],"results":[],"result":"Object"}]},{"urlregs":["/user","/user/*"],"moduleid":0,"name":"","comment":"用户请求入口","mappings":[{"url":"/user","auth":false,"actionid":0,"comment":"用户首页","params":[],"results":[],"result":"Object"},{"url":"/user/login","auth":false,"actionid":0,"comment":"前往登录页","params":[],"results":[],"result":"Object"},{"url":"/user/reg","auth":false,"actionid":0,"comment":"前往登录页","params":[],"results":[],"result":"Object"},{"url":"/user/set","auth":true,"actionid":0,"comment":"用户设置","params":[],"results":[],"result":"Object"}]}]}],"types":{"com.lxyer.bbs.comment.Comment":{"commentid":{"type":"int","comment":"[评论id]","primary":true,"updatable":true},"userid":{"type":"int","comment":"[评论用户id]","primary":false,"updatable":true},"pid":{"type":"int","comment":"[评论父id]","primary":false,"updatable":true},"cate":{"type":"short","comment":"[评论的类型]","primary":false,"updatable":true},"contentid":{"type":"int","comment":"[被评论内容的id]","primary":false,"updatable":true},"content":{"type":"java.lang.String","comment":"[评论内容]","primary":false,"updatable":true},"createtime":{"type":"long","comment":"[创建时间]","primary":false,"updatable":false},"supportnum":{"type":"int","comment":"[支持数]","primary":false,"updatable":true},"status":{"type":"short","comment":"[状态]1正常,-1删除","primary":false,"updatable":true}},"org.redkale.source.Flipper":{"limit":{"type":"int","comment":"每页多少行","primary":false,"updatable":true},"offset":{"type":"int","comment":"记录行的偏移量,从0开始","primary":false,"updatable":true},"sort":{"type":"java.lang.String","comment":"排序字段, 可多字段排序","primary":false,"updatable":true}},"com.lxyer.bbs.base.user.UserRecord":{"userid":{"type":"int","comment":"[用户id]","primary":true,"updatable":true},"username":{"type":"java.lang.String","comment":"[登录名]","primary":false,"updatable":true},"password":{"type":"java.lang.String","comment":"[密码]","primary":false,"updatable":true},"sex":{"type":"short","comment":"[性别]默认 10男,20女","primary":false,"updatable":true},"phone":{"type":"java.lang.String","comment":"[电话号码]","primary":false,"updatable":true},"nickname":{"type":"java.lang.String","comment":"[昵称]","primary":false,"updatable":true},"avatar":{"type":"java.lang.String","comment":"[头像地址]","primary":false,"updatable":true},"realname":{"type":"java.lang.String","comment":"[真实姓名]","primary":false,"updatable":true},"email":{"type":"java.lang.String","comment":"[邮箱]","primary":false,"updatable":true},"roleid":{"type":"int","comment":"","primary":false,"updatable":true},"site":{"type":"java.lang.String","comment":"[个人博客地址]","primary":false,"updatable":true},"git":{"type":"java.lang.String","comment":"[码云/GitHub]","primary":false,"updatable":true},"createtime":{"type":"long","comment":"[创建时间]","primary":false,"updatable":false},"sign":{"type":"java.lang.String","comment":"[签名]","primary":false,"updatable":true},"city":{"type":"java.lang.String","comment":"[所在城市]","primary":false,"updatable":true},"status":{"type":"short","comment":"[状态]-10删除 10正常","primary":false,"updatable":true}},"com.lxyer.bbs.base.user.UserBean":{"username":{"type":"java.lang.String","comment":"[登录名]","primary":false,"updatable":true},"phone":{"type":"java.lang.String","comment":"[电话号码]","primary":false,"updatable":true},"nickname":{"type":"java.lang.String","comment":"[昵称]","primary":false,"updatable":true},"realname":{"type":"java.lang.String","comment":"[真实姓名]","primary":false,"updatable":true},"email":{"type":"java.lang.String","comment":"[邮箱]","primary":false,"updatable":true}},"com.lxyer.bbs.base.user.LoginBean":{"username":{"type":"java.lang.String","primary":false,"updatable":true},"password":{"type":"java.lang.String","primary":false,"updatable":true},"sessionid":{"type":"java.lang.String","comment":"会话SESSIONID","primary":false,"updatable":true}},"com.lxyer.bbs.content.Content":{"contentid":{"type":"int","comment":"[内容id]","primary":true,"updatable":true},"userid":{"type":"int","comment":"[用户id]","primary":false,"updatable":true},"title":{"type":"java.lang.String","comment":"[标题]","primary":false,"updatable":true},"digest":{"type":"java.lang.String","comment":"[摘要]","primary":false,"updatable":true},"content":{"type":"java.lang.String","comment":"[内容]","primary":false,"updatable":true},"createtime":{"type":"long","comment":"[创建时间]","primary":false,"updatable":false},"cate":{"type":"short","comment":"[类别]","primary":false,"updatable":true},"type":{"type":"short","comment":"[内容栏目]10求助,20分享,30建议,40公告,50动态","primary":false,"updatable":true},"replynum":{"type":"int","comment":"[评论数]","primary":false,"updatable":true},"viewnum":{"type":"int","comment":"[阅读量]","primary":false,"updatable":true},"wonderful":{"type":"short","comment":"[精] 10否,20是","primary":false,"updatable":true},"top":{"type":"short","comment":"[置顶]10否,20是","primary":false,"updatable":true},"solved":{"type":"short","comment":"[结帖]10否,20是","primary":false,"updatable":true},"status":{"type":"short","comment":"[状态] -10删除 10未结帖 20结帖 30私密","primary":false,"updatable":true}}}} \ No newline at end of file diff --git a/conf/application.xml b/conf/application.xml index 5af49ff..6bc4073 100644 --- a/conf/application.xml +++ b/conf/application.xml @@ -1,25 +1,50 @@ + + + - + - - + + + + - + + + + + + + + - - + + + + + + + + + + + diff --git a/conf/persistence.xml b/conf/persistence.xml index 5cc12ba..915cb36 100644 --- a/conf/persistence.xml +++ b/conf/persistence.xml @@ -5,14 +5,10 @@ ALL - + - - - + + diff --git a/root/404.html b/root/404.html deleted file mode 100644 index 4debf52..0000000 --- a/root/404.html +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - 404 - - -

由于网站被攻击,已暂停访问

-

- 黑客把数据全部清空了,数据库有半个月没做备案了(失误),但是有所有一切操作的日志记录, - 包括黑客的攻击数据,ip,当然也有这十多天的文章提交数据,所以理论上,所有数据能够恢复, - 待恢复后再开做开放访问;谢谢你的关注和支持; -

-

- ----------- 绝尘,QQ237809796 -

- - \ No newline at end of file diff --git a/root/admin/index.html b/root/admin/index.html deleted file mode 100644 index e4dda54..0000000 --- a/root/admin/index.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - Title - - - - - \ No newline at end of file diff --git a/root/res/layui/css/modules/layim/html/chatlog.html b/root/res/layui/css/modules/layim/html/chatlog.html deleted file mode 100644 index 9cbc571..0000000 --- a/root/res/layui/css/modules/layim/html/chatlog.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - - - -聊天记录 - - - - - - -
-
    -
    - -
    - - - - - - - - - - - diff --git a/root/res/layui/css/modules/layim/html/find.html b/root/res/layui/css/modules/layim/html/find.html deleted file mode 100644 index ff5cab1..0000000 --- a/root/res/layui/css/modules/layim/html/find.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - -发现 - - - - - - -
    -
    此为自定义的【查找】页面,因需求不一,所以官方暂不提供该模版结构与样式,实际使用时,可移至该文件到你的项目中,对页面自行把控。 -
    文件所在目录(相对于layui.js):/css/modules/layim/html/find.html
    -
    - - - - - - - diff --git a/root/res/layui/css/modules/layim/html/getmsg.json b/root/res/layui/css/modules/layim/html/getmsg.json deleted file mode 100644 index 3d9b9d4..0000000 --- a/root/res/layui/css/modules/layim/html/getmsg.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "code": 0, - "pages": 1, - "data": [ - { - "id": 76, - "content": "申请添加你为好友", - "uid": 168, - "from": 166488, - "from_group": 0, - "type": 1, - "remark": "有问题要问", - "href": null, - "read": 1, - "time": "刚刚", - "user": { - "id": 166488, - "avatar": "http://q.qlogo.cn/qqapp/101235792/B704597964F9BD0DB648292D1B09F7E8/100", - "username": "李彦宏", - "sign": null - } - }, - { - "id": 75, - "content": "申请添加你为好友", - "uid": 168, - "from": 347592, - "from_group": 0, - "type": 1, - "remark": "你好啊!", - "href": null, - "read": 1, - "time": "刚刚", - "user": { - "id": 347592, - "avatar": "http://q.qlogo.cn/qqapp/101235792/B78751375E0531675B1272AD994BA875/100", - "username": "麻花疼", - "sign": null - } - }, - { - "id": 62, - "content": "雷军 拒绝了你的好友申请", - "uid": 168, - "from": null, - "from_group": null, - "type": 1, - "remark": null, - "href": null, - "read": 1, - "time": "10天前", - "user": { - "id": null - } - }, - { - "id": 60, - "content": "马小云 已经同意你的好友申请", - "uid": 168, - "from": null, - "from_group": null, - "type": 1, - "remark": null, - "href": null, - "read": 1, - "time": "10天前", - "user": { - "id": null - } - }, - { - "id": 61, - "content": "贤心 已经同意你的好友申请", - "uid": 168, - "from": null, - "from_group": null, - "type": 1, - "remark": null, - "href": null, - "read": 1, - "time": "10天前", - "user": { - "id": null - } - } - ] -} \ No newline at end of file diff --git a/root/res/layui/css/modules/layim/html/msgbox.html b/root/res/layui/css/modules/layim/html/msgbox.html deleted file mode 100644 index 0adf002..0000000 --- a/root/res/layui/css/modules/layim/html/msgbox.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - -消息盒子 - - - - - - -
      - -
      -
      注意:这些都是模拟数据,实际使用时,需将其中的模拟接口改为你的项目真实接口。 -
      该模版文件所在目录(相对于layui.js):/css/modules/layim/html/msgbox.html
      -
      - - - - - - - - - - diff --git a/root/res/layui/css/modules/layim/layim.css b/root/res/layui/css/modules/layim/layim.css deleted file mode 100644 index e9872f1..0000000 --- a/root/res/layui/css/modules/layim/layim.css +++ /dev/null @@ -1,2 +0,0 @@ -/** layui-v2.3.0 MIT License By https://www.layui.com */ - html #layuicss-skinlayimcss{display:none;position:absolute;width:1989px}body .layui-layim,body .layui-layim-chat{border:1px solid #D9D9D9;border-color:rgba(0,0,0,.05);background-repeat:no-repeat;background-color:#F6F6F6;color:#333;font-family:\5FAE\8F6F\96C5\9ED1}body .layui-layim-chat{background-size:cover}body .layui-layim .layui-layer-title{height:110px;border-bottom:none;background:0 0}.layui-layim-main{position:relative;top:-98px;left:0}body .layui-layim .layui-layer-content,body .layui-layim-chat .layui-layer-content{overflow:visible}.layui-layim cite,.layui-layim em,.layui-layim-chat cite,.layui-layim-chat em{font-style:normal}.layui-layim-info{height:50px;font-size:0;padding:0 15px}.layui-layim-info *{font-size:14px}.layim-tab-content li h5 *,.layui-layim-info div,.layui-layim-skin li,.layui-layim-tab li,.layui-layim-tool li{display:inline-block;vertical-align:top;*zoom:1;*display:inline}.layim-tab-content li h5 span,.layui-layim-info .layui-layim-user,.layui-layim-list li p,.layui-layim-list li span,.layui-layim-remark{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layui-layim-info .layui-layim-user{max-width:150px;margin-right:5px;font-size:16px}.layui-layim-status{position:relative;top:2px;line-height:19px;cursor:pointer}.layim-status-online{color:#3FDD86}.layim-status-hide{color:#DD691D}.layim-menu-box{display:none;position:absolute;z-index:100;top:24px;left:-31px;padding:5px 0;width:85px;border:1px solid #E2E2E2;border-radius:2px;background-color:#fff;box-shadow:1px 1px 20px rgba(0,0,0,.1)}.layim-menu-box li{position:relative;line-height:22px;padding-left:30px;font-size:12px}.layim-menu-box li cite{padding-right:5px;font-size:14px}.layim-menu-box li i{display:none;position:absolute;left:8px;top:0;font-weight:700;color:#5FB878}.layim-menu-box .layim-this i{display:block}.layim-menu-box li:hover{background-color:#eee}.layui-layim-remark{position:relative;left:-6px;display:block;width:100%;border:1px solid transparent;margin-top:8px;padding:0 5px;height:26px;line-height:26px;background:0 0;border-radius:2px}.layui-layim-remark:focus,.layui-layim-remark:hover{border:1px solid #d2d2d2;border-color:rgba(0,0,0,.15)}.layui-layim-remark:focus{background-color:#fff}.layui-layim-tab{margin-top:10px;padding:9px 0;font-size:0}.layui-layim-tab li{position:relative;width:33.33%;height:24px;line-height:24px;font-size:22px;text-align:center;color:#666;color:rgba(0,0,0,.6);cursor:pointer}.layim-tab-two li{width:50%}.layui-layim-tab li.layim-this:after{content:'';position:absolute;left:0;bottom:-9px;width:100%;height:3px;background-color:#3FDD86}.layui-layim-tab li.layim-hide{display:none}.layui-layim-tab li:hover{opacity:.8;filter:Alpha(opacity=80)}.layim-tab-content{display:none;padding:10px 0;height:349px;overflow:hidden;background-color:#fff;background-color:rgba(255,255,255,.9)}.layim-tab-content:hover{overflow-y:auto}.layim-tab-content li h5{position:relative;margin-right:15px;padding-left:30px;height:28px;line-height:28px;cursor:pointer;font-size:0;white-space:nowrap;overflow:hidden}.layim-tab-content li h5 *{font-size:14px}.layim-tab-content li h5 span{max-width:125px}.layim-tab-content li h5 i{position:absolute;left:12px;top:0;color:#C9BDBB}.layim-tab-content li h5 em{padding-left:5px;color:#999}.layim-tab-content li h5[lay-type=true] i{top:2px}.layim-tab-content li ul{display:none;margin-bottom:10px}.layui-layim-list li{position:relative;height:42px;padding:5px 15px 5px 60px;font-size:0;cursor:pointer}.layui-layim-list li:hover{background-color:#F2F2F2;background-color:rgba(0,0,0,.05)}.layui-layim-list li.layim-null{height:20px;line-height:20px;padding:0;font-size:14px;color:#999;text-align:center;cursor:default}.layui-layim-list li.layim-null:hover{background:0 0}.layui-layim-list li *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:14px}.layui-layim-list li span{margin-top:4px;max-width:155px}.layui-layim-list li img{position:absolute;left:15px;top:8px;width:36px;height:36px;border-radius:100%}.layui-layim-list li p{display:block;padding-right:30px;line-height:18px;font-size:12px;color:#999}.layui-layim-list li .layim-msg-status{display:none;position:absolute;right:10px;bottom:7px;padding:0 5px;height:16px;line-height:16px;border-radius:16px;text-align:center;font-size:10px;background-color:#F74C31;color:#fff}.layim-list-gray{-webkit-filter:grayscale(100%);-ms-filter:grayscale(100%);filter:grayscale(100%);filter:gray}.layui-layim-tool{padding:0 10px;font-size:0;background-color:#F6F6F6;border-radius:0 0 2px 2px}.layui-layim-tool li{position:relative;width:48px;height:37px;line-height:40px;text-align:center;font-size:22px;cursor:pointer}.layui-layim-tool li:active{background-color:#e2e2e2}.layui-layim-tool .layim-tool-msgbox{line-height:37px}.layui-layim-tool .layim-tool-find{line-height:38px}.layui-layim-tool .layim-tool-skin{font-size:26px}.layim-tool-msgbox span{display:none;position:absolute;left:12px;top:-12px;height:20px;line-height:20px;padding:0 10px;border-radius:2px;background-color:#33DF83;color:#fff;font-size:12px;-webkit-animation-duration:1s;animation-duration:1s}.layim-tool-msgbox .layer-anim-05{display:block}.layui-layim-search{display:none;position:absolute;bottom:5px;left:5px;height:28px;line-height:28px}.layui-layim-search input{width:210px;padding:0 30px 0 10px;height:30px;line-height:30px;border:none;border-radius:3px;background-color:#ddd}.layui-layim-search label{position:absolute;right:6px;top:4px;font-size:20px;cursor:pointer;color:#333;font-weight:400}.layui-layim-skin{margin:10px 0 0 10px;font-size:0}.layui-layim-skin li{margin:0 10px 10px 0;line-height:60px;text-align:center;background-color:#f6f6f6}.layui-layim-skin li,.layui-layim-skin li img{width:86px;height:60px;cursor:pointer}.layui-layim-skin li img:hover{opacity:.8;filter:Alpha(opacity=80)}.layui-layim-skin li cite{font-size:14px;font-style:normal}body .layui-layim-chat{background-color:#fff}body .layui-layim-chat-list{width:760px}body .layui-layim-chat .layui-layer-title{height:80px;border-bottom:none;background-color:#F8F8F8;background-color:rgba(245,245,245,.7)}body .layui-layim-chat .layui-layer-content{background:0 0}.layim-chat-list li *,.layui-layim-min .layui-layer-content *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:14px}.layim-chat-list{display:none;position:absolute;z-index:1000;top:-80px;width:200px;height:100%;background-color:#D9D9D9;overflow:hidden;font-size:0}.layim-chat-list:hover{overflow-y:auto}.layim-chat-list li,.layui-layim-min .layui-layer-content{position:relative;margin:5px;padding:5px 30px 5px 5px;line-height:40px;cursor:pointer;border-radius:3px}.layim-chat-list li img,.layui-layim-min .layui-layer-content img{width:40px;height:40px;border-radius:100%}.layui-layim-photos{cursor:crosshair}.layim-chat-list li{white-space:nowrap}.layim-chat-list li span,.layui-layim-min .layui-layer-content span{width:100px;padding-left:10px;font-size:16px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.layim-chat-list li span cite{color:#999;padding-left:10px}.layim-chat-list li:hover{background-color:#E2E2E2}.layim-chat-list li.layim-this{background-color:#F3F3F3}.layim-chat-list li .layui-icon{display:none;position:absolute;right:5px;top:7px;color:#555;font-size:22px}.layim-chat-list li .layui-icon:hover{color:#c00}.layim-chat-list li:hover .layui-icon{display:inline-block}.layim-chat-system{margin:10px 0;text-align:center}.layim-chat-system span{display:inline-block;line-height:30px;padding:0 15px;border-radius:3px;background-color:#e2e2e2;cursor:default;font-size:14px}.layim-chat{display:none;position:relative;background-color:#fff;background-color:rgba(255,255,255,.9)}.layim-chat-title{position:absolute;top:-80px;height:80px}.layim-chat-other{position:relative;top:15px;left:15px;padding-left:60px;cursor:default}.layim-chat-other img{position:absolute;left:0;top:0;width:50px;height:50px;border-radius:100%}.layim-chat-username{position:relative;top:5px;font-size:18px}.layim-chat-status{margin-top:6px;font-size:14px;color:#999}.layim-chat-group .layim-chat-other .layim-chat-username{cursor:pointer}.layim-chat-group .layim-chat-other .layim-chat-username em{padding:0 10px;color:#999}.layim-chat-main{height:262px;padding:15px 15px 5px;overflow-x:hidden;overflow-y:auto}.layim-chat-main ul li{position:relative;font-size:0;margin-bottom:10px;padding-left:60px;min-height:68px}.layim-chat-text,.layim-chat-user{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:14px}.layim-chat-user{position:absolute;left:3px}.layim-chat-user img{width:40px;height:40px;border-radius:100%}.layim-chat-user cite{position:absolute;left:60px;top:-2px;width:500px;line-height:24px;font-size:12px;white-space:nowrap;color:#999;text-align:left;font-style:normal}.layim-chat-user cite i{padding-left:15px;font-style:normal}.layim-chat-text{position:relative;line-height:22px;margin-top:25px;padding:8px 15px;background-color:#e2e2e2;border-radius:3px;color:#333;word-break:break-all;max-width:462px\9}.layim-chat-text:after{content:'';position:absolute;left:-10px;top:13px;width:0;height:0;border-style:solid dashed dashed;border-color:#e2e2e2 transparent transparent;overflow:hidden;border-width:10px}.layim-chat-text a{color:#33DF83}.layim-chat-text img{max-width:100%;vertical-align:middle}.layim-chat-text .layui-layim-file,.layui-layim-file{display:block;text-align:center}.layim-chat-text .layui-layim-file{color:#333}.layui-layim-file:hover{opacity:.9}.layui-layim-file i{font-size:80px;line-height:80px}.layui-layim-file cite{display:block;line-height:20px;font-size:14px}.layui-layim-audio{text-align:center;cursor:pointer}.layui-layim-audio .layui-icon{position:relative;top:5px;font-size:24px}.layui-layim-audio p{margin-top:3px}.layui-layim-video{width:120px;height:80px;line-height:80px;background-color:#333;text-align:center;border-radius:3px}.layui-layim-video .layui-icon{font-size:36px;cursor:pointer;color:#fff}.layim-chat-main ul .layim-chat-system{min-height:0;padding:0}.layim-chat-main ul .layim-chat-mine{text-align:right;padding-left:0;padding-right:60px}.layim-chat-mine .layim-chat-user{left:auto;right:3px}.layim-chat-mine .layim-chat-user cite{left:auto;right:60px;text-align:right}.layim-chat-mine .layim-chat-user cite i{padding-left:0;padding-right:15px}.layim-chat-mine .layim-chat-text{margin-left:0;text-align:left;background-color:#5FB878;color:#fff}.layim-chat-mine .layim-chat-text:after{left:auto;right:-10px;border-top-color:#5FB878}.layim-chat-mine .layim-chat-text a{color:#fff}.layim-chat-footer{border-top:1px solid #F1F1F1}.layim-chat-tool{position:relative;padding:0 8px;height:38px;line-height:38px;font-size:0}.layim-chat-tool span{position:relative;margin:0 10px;display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:24px;cursor:pointer}.layim-chat-tool .layim-tool-log{position:absolute;right:5px;font-size:14px}.layim-tool-log i{position:relative;top:2px;margin-right:5px;font-size:20px;color:#999}.layim-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}body .layui-layim-face{margin:10px 0 0 -18px;border:none;background:0 0}body .layui-layim-face .layui-layer-content{padding:0;background-color:#fff;color:#666;box-shadow:none}.layui-layim-face .layui-layer-TipsG{display:none}.layui-layim-face ul{position:relative;width:372px;padding:10px;border:1px solid #D9D9D9;background-color:#fff;box-shadow:0 0 20px rgba(0,0,0,.2)}.layui-layim-face ul li{cursor:pointer;float:left;border:1px solid #e8e8e8;height:22px;width:26px;overflow:hidden;margin:-1px 0 0 -1px;padding:4px 2px;text-align:center}.layui-layim-face ul li:hover{position:relative;z-index:2;border:1px solid #eb7350;background:#fff9ec}.layim-chat-textarea{margin-left:10px}.layim-chat-textarea textarea{display:block;width:100%;padding:5px 0 0;height:68px;line-height:20px;border:none;overflow:auto;resize:none;background:0 0}.layim-chat-textarea textarea:focus{outline:0}.layim-chat-bottom{position:relative;height:46px}.layim-chat-send{position:absolute;right:15px;top:3px;height:32px;line-height:32px;font-size:0;cursor:pointer}.layim-chat-send span{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:14px;line-height:32px;margin-left:5px;padding:0 20px;background-color:#5FB878;color:#fff;border-radius:3px}.layim-chat-send span:hover{background-color:#69BC80}.layim-chat-send span:active{background-color:#59B573}.layim-chat-send .layim-send-btn{border-radius:3px 0 0 3px}.layim-chat-send .layim-send-set{position:relative;width:30px;height:32px;margin-left:0;padding:0;border-left:1px solid #85C998;border-radius:0 3px 3px 0}.layim-send-set .layui-edge{position:absolute;top:14px;left:9px;border-width:6px;border-top-style:solid;border-top-color:#fff}.layim-chat-send .layim-menu-box{left:auto;right:0;top:33px;width:180px;padding:10px 0}.layim-chat-send .layim-menu-box li{padding-right:15px;line-height:28px}body .layui-layim-min{border:1px solid #D9D9D9}.layui-layim-min .layui-layer-content{margin:0 5px;padding:5px 10px;white-space:nowrap}.layui-layim-close .layui-layer-content span{width:auto;max-width:120px}body .layui-layim-members{margin:25px 0 0 -75px;border:none;background:0 0}body .layui-layim-members .layui-layer-content{padding:0;background:0 0;color:#666;box-shadow:none}.layui-layim-members .layui-layer-TipsG{display:none}.layui-layim-members ul{position:relative;width:578px;height:200px;padding:10px 10px 0;border:1px solid #D9D9D9;background-color:#fff;background-color:rgba(255,255,255,.9);box-shadow:none;overflow:hidden;font-size:0}.layui-layim-members ul:hover{overflow:auto}.layim-add-img,.layim-add-remark,.layui-layim-members li{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:14px}.layui-layim-members li{width:112px;margin:10px 0;text-align:center}.layui-layim-members li a{position:relative;display:inline-block;max-width:100%}.layui-layim-members li a:after{content:'';position:absolute;width:46px;height:46px;left:50%;margin-left:-23px;top:0;border:1px solid #eee;border-color:rgba(0,0,0,.1);border-radius:100%}.layui-layim-members li img{width:48px;height:48px;border-radius:100%}.layui-layim-members li:hover{opacity:.9}.layui-layim-members li a cite{display:block;padding:0 3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}body .layui-layim-contextmenu{margin:70px 0 0 30px;width:200px;padding:5px 0;border:1px solid #ccc;background:#fff;border-radius:0;box-shadow:0 0 5px rgba(0,0,0,.2)}body .layui-layim-contextmenu .layui-layer-content{padding:0;background-color:#fff;color:#333;font-size:14px;box-shadow:none}.layui-layim-contextmenu .layui-layer-TipsG{display:none}.layui-layim-contextmenu li{padding:0 15px 0 35px;cursor:pointer;line-height:30px}.layui-layim-contextmenu li:hover{background-color:#F2F2F2}.layim-add-box{margin:15px;font-size:0}.layim-add-img img,.layim-add-remark p{margin-bottom:10px}.layim-add-img{width:100px;margin-right:20px;text-align:center}.layim-add-img img{width:100px;height:100px}.layim-add-remark{width:280px}.layim-add-remark .layui-select{width:100%;margin-bottom:10px}.layim-add-remark .layui-textarea{height:80px;min-height:80px;resize:none}.layim-tab-content,.layui-layim-face ul,.layui-layim-tab{margin-bottom:0}.layim-tab-content li h5{margin-top:0;margin-bottom:0},.layui-layim-face img{vertical-align:bottom}.layim-chat-other span{color:#444}.layim-chat-other span cite{padding:0 15px;color:#999}.layim-chat-other:hover{text-decoration:none} \ No newline at end of file diff --git a/root/res/layui/css/modules/layim/mobile/layim.css b/root/res/layui/css/modules/layim/mobile/layim.css deleted file mode 100644 index 65b5170..0000000 --- a/root/res/layui/css/modules/layim/mobile/layim.css +++ /dev/null @@ -1,2 +0,0 @@ -/** layui-v2.3.0 MIT License By https://www.layui.com */ - .layim-tab-content li h5,.layui-layim-list li{border-bottom:1px solid #f2f2f2;cursor:pointer}html #layuicss-skinlayim-mobilecss{display:none;position:absolute;width:1989px}.layim-tab-content li h5 *,.layui-layim-skin li,.layui-layim-tab li,.layui-layim-tool li{display:inline-block;vertical-align:top;*zoom:1;*display:inline}.layim-tab-content li h5 span,.layui-layim-list li p,.layui-layim-list li span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.layui-layim-tab{position:absolute;bottom:0;left:0;right:0;height:50px;border-top:1px solid #f2f2f2;background-color:#fff}.layui-layim-tab li{position:relative;width:33.33%;height:50px;text-align:center;color:#666;color:rgba(0,0,0,.6);cursor:pointer}.layui-layim-tab li .layui-icon{position:relative;top:7px;font-size:25px}.layui-layim-tab li span{position:relative;bottom:-3px;display:block;font-size:12px}.layui-layim-tab li[lay-type=more] .layui-icon{top:4px;font-size:22px}.layui-layim-tab li.layim-this{color:#3FDD86}.layim-new{display:none;position:absolute;top:5px;left:50%;margin-left:15px;width:10px;height:10px;border-radius:10px;background-color:#F74C31;color:#fff}.layim-list-top .layim-new{position:relative;vertical-align:top;top:10px;left:initial;margin-left:5px}.layim-list-top i.layui-show{display:inline-block!important}.layim-tab-content,.layim-tab-content li ul{display:none}.layui-layim{position:fixed;left:0;right:0;top:50px;bottom:50px;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch}.layim-tab-content li h5{position:relative;padding-left:35px;height:45px;line-height:45px;font-size:0;white-space:nowrap;overflow:hidden}.layim-tab-content li h5 *{font-size:17px}.layim-tab-content li h5 span{max-width:80%}.layim-tab-content li h5 i{position:absolute;left:12px;top:0;color:#C9BDBB}.layim-tab-content li h5 em{padding-left:5px;color:#999}.layim-list-friend,.layim-list-group{background-color:#fff}.layui-layim-list li{position:relative;height:42px;padding:5px 15px 5px 60px;font-size:0}.layui-layim-list li:active{background-color:#F2F2F2;background-color:rgba(0,0,0,.05)}.layui-layim-list li.layim-null{height:20px;line-height:20px;padding:10px 0;color:#999;text-align:center;cursor:default;font-size:14px}.layim-list-history li.layim-null{padding:30px 0;border-bottom:none;background-color:#eee}.layui-layim-list li *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:17px}.layui-layim-list li span{margin-top:2px;max-width:155px;font-size:17px}.layui-layim-list li img{position:absolute;left:12px;top:8px;width:36px;height:36px;border-radius:100%}.layui-layim-list li p{display:block;padding-right:30px;line-height:18px;font-size:13px;color:#999}.layui-layim-list li .layim-msg-status{display:none;position:absolute;right:10px;bottom:7px;padding:0 5px;height:17px;line-height:17px;border-radius:17px;text-align:center;font-size:10px;background-color:#F74C31;color:#fff}.layim-list-gray{-webkit-filter:grayscale(100%);-ms-filter:grayscale(100%);filter:grayscale(100%);filter:gray}.layim-list-top{background-color:#fff;font-size:17px}.layim-list-top li{position:relative;padding:0 15px 0 50px;line-height:45px;border-bottom:1px solid #f2f2f2;cursor:pointer}.layim-list-top li:last-child{margin-bottom:10px;border-bottom:none}.layim-list-top li .layui-icon{position:absolute;left:12px;top:0;margin-right:10px;color:#36373C;font-size:24px}.layim-list-top li[layim-event=newFriend] .layui-icon{left:15px}.layim-panel,.layim-title{position:fixed;left:0;right:0;top:0}.layim-list-top li[layim-event=group] .layui-icon{font-size:20px}.layim-list-top li[layim-event=about] .layui-icon{font-size:25px}.layim-panel{bottom:0;background-color:#eee;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.2s;animation-duration:.2s}.layim-title{height:50px;line-height:50px;padding:0 15px;background-color:#36373C;color:#fff;font-size:18px}.layim-chat-status{padding-left:15px;font-size:14px;opacity:.7}.layim-title .layim-chat-back{display:inline-block;vertical-align:middle;position:relative;padding:0 15px;margin-left:-10px;top:0;font-size:24px;cursor:pointer}.layim-chat-detail{position:absolute;right:0;top:0;padding:0 15px;font-size:18px;cursor:pointer}.layim-chat-main,.layim-content{position:fixed;top:50px;left:0;right:0;overflow-y:auto;overflow-x:hidden}.layim-chat-detail:active,.layim-title .layim-chat-back:active{opacity:.8}.layui-layim .layim-title{text-align:left}.layui-layim .layim-title p{padding:0 15px}.layim-content{bottom:0}.layim-chat-main{width:100%;bottom:85px;padding:15px;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.layim-chat-main ul{overflow-x:hidden}.layim-chat-main ul li{position:relative;font-size:0;margin-bottom:10px;padding-left:60px;min-height:68px}.layim-chat-text,.layim-chat-user{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:15px}.layim-chat-user{position:absolute;left:3px}.layim-chat-user img{width:40px;height:40px;border-radius:100%}.layim-chat-user cite{position:absolute;left:60px;top:-2px;width:500px;line-height:24px;font-size:12px;white-space:nowrap;color:#999;text-align:left;font-style:normal}.layim-chat-user cite i{padding-left:15px;font-style:normal}.layim-chat-text{position:relative;min-height:22px;line-height:22px;margin-top:25px;padding:8px 15px;background-color:#fff;border-radius:3px;color:#333;word-break:break-all}.layim-chat-text:after{content:'';position:absolute;left:-10px;top:13px;width:0;height:0;border-style:solid dashed dashed;border-color:#fff transparent transparent;overflow:hidden;border-width:10px}.layim-chat-text a{color:#33DF83}.layim-chat-text img{max-width:100%;vertical-align:middle}.layim-chat-text .layui-layim-file,.layui-layim-file{display:block;text-align:center}.layim-chat-text .layui-layim-file{color:#333}.layui-layim-file:active{opacity:.9}.layui-layim-file i{font-size:80px;line-height:80px}.layui-layim-file cite{display:block;line-height:20px;font-size:17px}.layui-layim-audio{text-align:center;cursor:pointer}.layui-layim-audio .layui-icon{position:relative;top:5px;font-size:24px}.layui-layim-audio p{margin-top:3px}.layui-layim-video{width:120px;height:80px;line-height:80px;background-color:#333;text-align:center;border-radius:3px}.layui-layim-video .layui-icon{font-size:36px;cursor:pointer;color:#fff}.layim-chat-main ul .layim-chat-mine{text-align:right;padding-left:0;padding-right:60px}.layim-chat-mine .layim-chat-user{left:auto;right:3px}.layim-chat-mine .layim-chat-user cite{left:auto;right:60px;text-align:right}.layim-chat-mine .layim-chat-user cite i{padding-left:0;padding-right:15px}.layim-chat-mine .layim-chat-text{margin-left:0;text-align:left;background-color:#5FB878;color:#fff}.layim-chat-mine .layim-chat-text:after{left:auto;right:-10px;border-top-color:#5FB878}.layim-chat-mine .layim-chat-text a{color:#fff}.layim-chat-main ul .layim-chat-system{min-height:0;margin:20px 0 5px;padding:0}.layim-chat-system{margin:10px 0;text-align:center}.layim-chat-system span{display:inline-block;line-height:30px;padding:0 15px;border-radius:3px;background-color:#ddd;color:#fff;font-size:14px;cursor:pointer}.layim-chat-footer{position:fixed;bottom:0;left:10px;right:10px;height:80px}.layim-chat-send{display:-webkit-box;display:-webkit-flex;display:flex}.layim-chat-send input{-webkit-box-flex:1;-webkit-flex:1;flex:1;height:40px;padding-left:5px;border:0;background-color:#fff;border-radius:3px}.layim-chat-send button{border-radius:3px;height:40px;padding:0 20px;border:0;margin-left:10px;background-color:#5FB878;color:#fff}.layim-chat-tool{position:relative;width:100%;overflow-x:auto;padding:0;height:38px;line-height:38px;margin-top:3px;font-size:0;white-space:nowrap}.layim-chat-tool span{position:relative;margin:0 15px;display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:28px;cursor:pointer}.layim-chat-tool .layim-tool-log{position:absolute;right:5px;font-size:14px}.layim-tool-log i{position:relative;top:2px;margin-right:5px;font-size:20px;color:#999}.layim-tool-image input{position:absolute;font-size:0;left:0;top:0;width:100%;height:100%;opacity:.01;filter:Alpha(opacity=1);cursor:pointer}.layim-layer{position:fixed;bottom:85px;left:10px;right:10px;margin:0 auto}.layui-layim-face{position:relative;max-height:180px;overflow:auto;padding:10px;font-size:0}.layui-layim-face li{cursor:pointer;display:inline-block;vertical-align:bottom;padding:5px 2px;text-align:center;width:10%;-webkit-box-sizing:border-box!important;-moz-box-sizing:border-box!important;box-sizing:border-box!important}.layui-layim-face li img{width:22px;height:22px}.layim-about{font-size:17px}.layim-about .layui-m-layercont{text-align:left}.layim-about .layui-m-layercont p{line-height:30px}.layim-about .layui-m-layercont a{color:#01AAED} \ No newline at end of file diff --git a/root/res/layui/css/modules/layim/skin/1.jpg b/root/res/layui/css/modules/layim/skin/1.jpg deleted file mode 100644 index d9f99263d65a31247c966813d155b83f1ebbd1ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18386 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 diff --git a/root/res/layui/css/modules/layim/skin/3.jpg b/root/res/layui/css/modules/layim/skin/3.jpg deleted file mode 100644 index 53ba9216283a962b6d325965a4a11c7504056e54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18610 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 diff --git a/root/res/layui/css/modules/layim/skin/5.jpg b/root/res/layui/css/modules/layim/skin/5.jpg deleted file mode 100644 index 8ed74b9366c80405f06c29811804c3a089d8934a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33379 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 IWZ8rN0!$i$=l}o! diff --git a/root/res/layui/css/modules/layim/voice/default.mp3 b/root/res/layui/css/modules/layim/voice/default.mp3 deleted file mode 100644 index 0f20b1fbc6be246585df3639bf69358a0f6dfb27..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13823 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 iguvlh0?dAaU|Np{{ data.username||data.groupname||data.name||"佚名" }}

        {{ data.remark||data.sign||"" }}

        new',"{{# }); if(length === 0){ }}",'
      • '+(a[i.type]||"暂无数据")+"
      • ","{{# } }}"].join("")},y=['
        ','
        ','
        {{ d.mine.username }}
        ','
        ','{{# if(d.mine.status === "online"){ }}','','{{# } else if(d.mine.status === "hide") { }}','',"{{# } }}",'
          ','
        • 在线
        • ','
        • 隐身
        • ',"
        ","
        ",'',"
        ",'
          ','
        • ','
        • ','
        • ',"
        ",'
          ','{{# layui.each(d.friend, function(index, item){ var spread = d.local["spread"+index]; }}',"
        • ",'
          {{# if(spread === "true"){ }}{{# } else { }}{{# } }}{{ item.groupname||"未命名分组"+index }}( {{ (item.list||[]).length }})
          ','
            ',u({type:"friend",item:"item.list",index:"index"}),"
          ","
        • ","{{# }); if(d.friend.length === 0){ }}",'
          • 暂无联系人
          ',"{{# } }}","
        ",'
          ',"
        • ",'
            ',u({type:"group"}),"
          ","
        • ","
        ",'
          ',"
        • ",'
            ',u({type:"history"}),"
          ","
        • ","
        ",'
          ',"
        • ",'',"
        • ","
        ",'
          ','',"{{# if(d.base.msgbox){ }}",'
        • ',"{{# } }}","{{# if(d.base.find){ }}",'
        • ',"{{# } }}",'
        • ',"{{# if(!d.base.copyright){ }}",'
        • ',"{{# } }}","
        ",'',"
        "].join(""),m=['
          ',"{{# layui.each(d.skin, function(index, item){ }}",'
        • ',"{{# }); }}",'
        • 简约
        • ',"
        "].join(""),f=['
        ','
        ','
        ','{{ d.data.name||"佚名" }} {{d.data.temporary ? "临时会话" : ""}} {{# if(d.data.type==="group"){ }} {{# } }}','

        ',"
        ","
        ",'
        ',"
          ","
          ",'","
          "].join(""),p=['
          ','

          {{ d.data.name||"" }}

          ','
          ','{{# if(d.data.type === "friend" && d.type === "setGroup"){ }}',"

          选择分组

          ",'{{# } if(d.data.type === "friend"){ }}','","{{# } }}",'{{# if(d.data.type === "group"){ }}',"

          请输入验证信息

          ",'{{# } if(d.type !== "setGroup"){ }}','',"{{# } }}","
          ","
          "].join(""),h=['
        • ','
          ',"{{# if(d.mine){ }}",'{{ layui.data.date(d.timestamp) }}{{ d.username||"佚名" }}',"{{# } else { }}",'{{ d.username||"佚名" }}{{ layui.data.date(d.timestamp) }}',"{{# } }}","
          ",'
          {{ layui.data.content(d.content||" ") }}
          ',"
        • "].join(""),v='
        • {{ d.data.name||"佚名" }}{{# if(!d.base.brief){ }}{{# } }}
        • ',g=function(i){return i<10?"0"+(0|i):i};layui.data.date=function(i){var a=new Date(i||new Date);return a.getFullYear()+"-"+g(a.getMonth()+1)+"-"+g(a.getDate())+" "+g(a.getHours())+":"+g(a.getMinutes())+":"+g(a.getSeconds())},layui.data.content=function(i){var a=function(i){return new RegExp("\\n*\\["+(i||"")+"(code|pre|div|span|p|table|thead|th|tbody|tr|td|ul|li|ol|li|dl|dt|dd|h2|h3|h4|h5)([\\s\\S]*?)\\]\\n*","g")};return i=(i||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""").replace(/@(\S+)(\s+?|$)/g,'@
          $1$2').replace(/face\[([^\s\[\]]+?)\]/g,function(i){var a=i.replace(/^face/g,"");return''+a+''}).replace(/img\[([^\s]+?)\]/g,function(i){return''}).replace(/file\([\s\S]+?\)\[[\s\S]*?\]/g,function(i){var a=(i.match(/file\(([\s\S]+?)\)\[/)||[])[1],e=(i.match(/\)\[([\s\S]*?)\]/)||[])[1];return a?''+(e||a)+"":i}).replace(/audio\[([^\s]+?)\]/g,function(i){return'

          音频消息

          '}).replace(/video\[([^\s]+?)\]/g,function(i){return'
          '}).replace(/a\([\s\S]+?\)\[[\s\S]*?\]/g,function(i){var a=(i.match(/a\(([\s\S]+?)\)\[/)||[])[1],e=(i.match(/\)\[([\s\S]*?)\]/)||[])[1];return a?''+(e||a)+"":i}).replace(a(),"<$1 $2>").replace(a("/"),"").replace(/\n/g,"
          ")};var x,b,w,k,C,S=function(i,a,n){return i=i||{},e.ajax({url:i.url,type:i.type||"get",data:i.data,dataType:i.dataType||"json",cache:!1,success:function(i){0==i.code?a&&a(i.data||{}):t.msg(i.msg||(n||"Error")+": LAYIM_NOT_GET_DATA",{time:5e3})},error:function(i,a){window.console&&console.log&&console.error("LAYIM_DATE_ERROR:"+a)}})},j={message:{},chat:[]},H=function(i){var a=i.init||{};return mine=a.mine||{},local=layui.data("layim")[mine.id]||{},obj={base:i,local:local,mine:mine,history:local.history||{}},create=function(a){var t=a.mine||{},l=layui.data("layim")[t.id]||{},s={base:i,local:l,mine:t,friend:a.friend||[],group:a.group||[],history:l.history||{}};j=e.extend(j,s),L(n(y).render(s)),(l.close||i.min)&&T(),layui.each(r.ready,function(i,a){a&&a(s)})},j=e.extend(j,obj),i.brief?layui.each(r.ready,function(i,a){a&&a(obj)}):void(a.url?S(a,create,"INIT"):create(a))},L=function(i){return t.open({type:1,area:["260px","520px"],skin:"layui-box layui-layim",title:"​",offset:"rb",id:"layui-layim",shade:!1,anim:2,resize:!1,content:i,success:function(i){x=i,R(i),j.base.right&&i.css("margin-left","-"+j.base.right),b&&t.close(b.attr("times"));var a=[],n=i.find(".layim-list-history");n.find("li").each(function(){a.push(e(this).prop("outerHTML"))}),a.length>0&&(a.reverse(),n.html(a.join(""))),A(),ti.sign()},cancel:function(i){T();var a=layui.data("layim")[j.mine.id]||{};return a.close=!0,layui.data("layim",{key:j.mine.id,value:a}),!1}})},A=function(){x.on("contextmenu",function(i){return i.cancelBubble=!0,i.returnValue=!1,!1});var i=function(){t.closeAll("tips")};x.find(".layim-list-history").on("contextmenu","li",function(a){var n=e(this),l='
          • 移除该会话
          • 清空全部会话列表
          ';n.hasClass("layim-null")||(t.tips(l,this,{tips:1,time:0,anim:5,fixed:!0,skin:"layui-box layui-layim-contextmenu",success:function(i){var a=function(i){ii(i)};i.off("mousedown",a).on("mousedown",a)}}),e(document).off("mousedown",i).on("mousedown",i),e(window).off("resize",i).on("resize",i))})},T=function(i){return b&&t.close(b.attr("times")),x&&x.hide(),j.mine=j.mine||{},t.open({type:1,title:!1,id:"layui-layim-close",skin:"layui-box layui-layim-min layui-layim-close",shade:!1,closeBtn:!1,anim:2,offset:"rb",resize:!1,content:''+(i||j.base.title||"我的LayIM")+"",move:"#layui-layim-close img",success:function(i,a){b=i,j.base.right&&i.css("margin-left","-"+j.base.right),i.on("click",function(){t.close(a),x.show();var i=layui.data("layim")[j.mine.id]||{};delete i.close,layui.data("layim",{key:j.mine.id,value:i})})}})},z=function(i){i=i||{};var a=e("#layui-layim-chat"),l={data:i,base:j.base,local:j.local};if(!i.id)return t.msg("非法用户");if(a[0]){var s=w.find(".layim-chat-list"),o=s.find(".layim-chatlist-"+i.type+i.id),d=w.find(".layui-layer-max").hasClass("layui-layer-maxmin"),c=a.children(".layim-chat-box");return"none"===w.css("display")&&w.show(),k&&t.close(k.attr("times")),1!==s.find("li").length||o[0]||(d||w.css("width",800),s.css({height:w.height()}).show(),c.css("margin-left","200px")),o[0]||(s.append(n(v).render(l)),c.append(n(f).render(l)),I(i),E()),O(s.find(".layim-chatlist-"+i.type+i.id)),o[0]||U(),$(i),Q(),C}l.first=!0;var u=C=t.open({type:1,area:"600px",skin:"layui-box layui-layim-chat",id:"layui-layim-chat",title:"​",shade:!1,maxmin:!0,offset:i.offset||"auto",anim:i.anim||0,closeBtn:!j.base.brief&&1,content:n('
            '+v+'
          '+f+"
          ").render(l),success:function(a){w=a,a.css({"min-width":"500px","min-height":"420px"}),I(i),"function"==typeof i.success&&i.success(a),Q(),R(a),$(i),U(),q(),layui.each(r.chatChange,function(i,a){a&&a(_())}),a.on("dblclick",".layui-layim-photos",function(){var i=this.src;t.close(z.photosIndex),t.photos({photos:{data:[{alt:"大图模式",src:i}]},shade:.01,closeBtn:2,anim:0,resize:!1,success:function(i,a){z.photosIndex=a}})})},full:function(i){t.style(u,{width:"100%",height:"100%"},!0),E()},resizing:E,restore:E,min:function(){return N(),!1},end:function(){t.closeAll("tips"),w=null}});return u},I=function(i){e(".layim-"+i.type+i.id).each(function(){e(this).hasClass("layim-list-gray")&&layui.layim.setFriendStatus(i.id,"offline")})},E=function(){var i=w.find(".layim-chat-list"),a=w.find(".layim-chat-main"),e=w.height();i.css({height:e}),a.css({height:e-20-80-158})},N=function(i){var a=i||_().data,n=layui.layim.cache().base;w&&!i&&w.hide(),t.close(N.index),N.index=t.open({type:1,title:!1,skin:"layui-box layui-layim-min",shade:!1,closeBtn:!1,anim:a.anim||2,offset:"b",move:"#layui-layim-min",resize:!1,area:["182px","50px"],content:''+a.name+"",success:function(a,l){i||(k=a),n.minRight&&t.style(l,{left:e(window).width()-a.outerWidth()-parseFloat(n.minRight)}),a.find(".layui-layer-content span").on("click",function(){t.close(l),i?layui.each(j.chat,function(i,a){z(a)}):w.show(),i&&(j.chat=[],Z())}),a.find(".layui-layer-content img").on("click",function(i){ii(i)})}})},M=function(i,a){return i=i||{},t.close(M.index),M.index=t.open({type:1,area:"430px",title:{friend:"添加好友",group:"加入群组"}[i.type]||"",shade:!1,resize:!1,btn:a?["确认","取消"]:["发送申请","关闭"],content:n(p).render({data:{name:i.username||i.groupname,avatar:i.avatar,group:i.group||parent.layui.layim.cache().friend||[],type:i.type},type:a}),yes:function(e,t){var n=t.find("#LAY_layimGroup"),l=t.find("#LAY_layimRemark");a?i.submit&&i.submit(n.val(),e):i.submit&&i.submit(n.val(),l.val(),e)}})},O=function(i,a){i=i||e(".layim-chat-list ."+o);var n=i.index()===-1?0:i.index(),l=".layim-chat",d=w.find(l).eq(n),c=w.find(".layui-layer-max").hasClass("layui-layer-maxmin");if(a){i.hasClass(o)&&O(0===n?i.next():i.prev());var u=w.find(l).length;return 1===u?t.close(C):(i.remove(),d.remove(),2===u&&(w.find(".layim-chat-list").hide(),c||w.css("width","600px"),w.find(".layim-chat-box").css("margin-left",0)),!1)}i.addClass(o).siblings().removeClass(o),d.addClass(s).siblings(l).removeClass(s),d.find("textarea").focus(),layui.each(r.chatChange,function(i,a){a&&a(_())}),q()},q=function(){var i=_(),a=j.message[i.data.type+i.data.id];a&&delete j.message[i.data.type+i.data.id]},_=c.prototype.thisChat=function(){if(w){var i=e(".layim-chat-list ."+o).index(),a=w.find(".layim-chat").eq(i),t=JSON.parse(decodeURIComponent(a.find(".layim-chat-tool").data("json")));return{elem:a,data:t,textarea:a.find("textarea")}}},R=function(i){var a=layui.data("layim")[j.mine.id]||{},e=a.skin;i.css({"background-image":e?"url("+e+")":function(){return j.base.initSkin?"url("+(layui.cache.dir+"css/modules/layim/skin/"+j.base.initSkin)+")":"none"}()})},$=function(i){var a=layui.data("layim")[j.mine.id]||{},e={},t=a.history||{},l=t[i.type+i.id];if(x){var s=x.find(".layim-list-history");if(i.historyTime=(new Date).getTime(),t[i.type+i.id]=i,a.history=t,layui.data("layim",{key:j.mine.id,value:a}),!l){e[i.type+i.id]=i;var o=n(u({type:"history",item:"d.data"})).render({data:e});s.prepend(o),s.find(".layim-null").remove()}}},D=function(){var i={username:j.mine?j.mine.username:"访客",avatar:j.mine?j.mine.avatar:layui.cache.dir+"css/pc/layim/skin/logo.jpg",id:j.mine?j.mine.id:null,mine:!0},a=_(),e=a.elem.find(".layim-chat-main ul"),l=j.base.maxLength||3e3;if(i.content=a.textarea.val(),""!==i.content.replace(/\s/g,"")){if(i.content.length>l)return t.msg("内容最长不能超过"+l+"个字符");e.append(n(h).render(i));var s={mine:i,to:a.data},o={username:s.mine.username,avatar:s.mine.avatar,id:s.to.id,type:s.to.type,content:s.mine.content,timestamp:(new Date).getTime(),mine:!0};B(o),layui.each(r.sendMessage,function(i,a){a&&a(s)})}Z(),a.textarea.val("").focus()},J=function(i){if(i=i||{},window.Notification)if("granted"===Notification.permission){new Notification(i.title||"",{body:i.content||"",icon:i.avatar||"http://tp2.sinaimg.cn/5488749285/50/5719808192/1"})}else Notification.requestPermission()},F=function(){if(!(l.ie&&l.ie<9)){var i=document.createElement("audio");i.src=layui.cache.dir+"css/modules/layim/voice/"+j.base.voice,i.play()}},G={},K=function(i){i=i||{};var a=e(".layim-chatlist-"+i.type+i.id),t={},l=a.index();if(i.timestamp=i.timestamp||(new Date).getTime(),i.fromid==j.mine.id&&(i.mine=!0),i.system||B(i),G=JSON.parse(JSON.stringify(i)),j.base.voice&&F(),!w&&i.content||l===-1){if(j.message[i.type+i.id])j.message[i.type+i.id].push(i);else if(j.message[i.type+i.id]=[i],"friend"===i.type){var s;layui.each(j.friend,function(a,e){if(layui.each(e.list,function(a,e){if(e.id==i.id)return e.type="friend",e.name=e.username,j.chat.push(e),s=!0}),s)return!0}),s||(i.name=i.username,i.temporary=!0,j.chat.push(i))}else if("group"===i.type){var o;layui.each(j.group,function(a,e){if(e.id==i.id)return e.type="group",e.name=e.groupname,j.chat.push(e),o=!0}),o||(i.name=i.groupname,j.chat.push(i))}else i.name=i.name||i.username||i.groupname,j.chat.push(i);if("group"===i.type&&layui.each(j.group,function(a,e){if(e.id==i.id)return t.avatar=e.avatar,!0}),!i.system)return j.base.notice&&J({title:"来自 "+i.username+" 的消息",content:i.content,avatar:t.avatar||i.avatar}),N({name:"收到新消息",avatar:t.avatar||i.avatar,anim:6})}if(w){var d=_();d.data.type+d.data.id!==i.type+i.id&&(a.addClass("layui-anim layer-anim-06"),setTimeout(function(){a.removeClass("layui-anim layer-anim-06")},300));var r=w.find(".layim-chat").eq(l),c=r.find(".layim-chat-main ul");i.system?l!==-1&&c.append('
        • '+i.content+"
        • "):""!==i.content.replace(/\s/g,"")&&c.append(n(h).render(i)),Z()}},Y="layui-anim-loop layer-anim-05",V=function(i){var a=x.find(".layim-tool-msgbox");a.find("span").addClass(Y).html(i)},B=function(i){var a=layui.data("layim")[j.mine.id]||{};a.chatlog=a.chatlog||{};var e=a.chatlog[i.type+i.id];if(e){var t;layui.each(e,function(a,e){e.timestamp===i.timestamp&&e.type===i.type&&e.id===i.id&&e.content===i.content&&(t=!0)}),t||i.fromid==j.mine.id||e.push(i),e.length>d&&e.shift()}else a.chatlog[i.type+i.id]=[i];layui.data("layim",{key:j.mine.id,value:a})},U=function(){var i=layui.data("layim")[j.mine.id]||{},a=_(),e=i.chatlog||{},t=a.elem.find(".layim-chat-main ul");layui.each(e[a.data.type+a.data.id],function(i,a){t.append(n(h).render(a))}),Z()},P=function(i){var a,e={},l=x.find(".layim-list-"+i.type);if(j[i.type])if("friend"===i.type)layui.each(j.friend,function(n,l){if(i.groupid==l.id)return layui.each(j.friend[n].list,function(e,t){if(t.id==i.id)return a=!0}),a?t.msg("好友 ["+(i.username||"")+"] 已经存在列表中",{anim:6}):(j.friend[n].list=j.friend[n].list||[],e[j.friend[n].list.length]=i,i.groupIndex=n,j.friend[n].list.push(i),!0)});else if("group"===i.type){if(layui.each(j.group,function(e,t){if(t.id==i.id)return a=!0}),a)return t.msg("您已是 ["+(i.groupname||"")+"] 的群成员",{anim:6});e[j.group.length]=i,j.group.push(i)}if(!a){var s=n(u({type:i.type,item:"d.data",index:"friend"===i.type?"data.groupIndex":null})).render({data:e});if("friend"===i.type){var o=l.find(">li").eq(i.groupIndex);o.find(".layui-layim-list").append(s),o.find(".layim-count").html(j.friend[i.groupIndex].list.length),o.find(".layim-null")[0]&&o.find(".layim-null").remove()}else"group"===i.type&&(l.append(s),l.find(".layim-null")[0]&&l.find(".layim-null").remove())}},W=function(i){var a=x.find(".layim-list-"+i.type);j[i.type]&&("friend"===i.type?layui.each(j.friend,function(e,t){layui.each(t.list,function(t,n){if(i.id==n.id){var l=a.find(">li").eq(e);l.find(".layui-layim-list>li");return l.find(".layui-layim-list>li").eq(t).remove(),j.friend[e].list.splice(t,1),l.find(".layim-count").html(j.friend[e].list.length),0===j.friend[e].list.length&&l.find(".layui-layim-list").html('
        • 该分组下已无好友了
        • '),!0}})}):"group"===i.type&&layui.each(j.group,function(e,t){if(i.id==t.id)return a.find(">li").eq(e).remove(),j.group.splice(e,1),0===j.group.length&&a.html('
        • 暂无群组
        • '),!0}))},Z=function(){var i=_(),a=i.elem.find(".layim-chat-main"),e=a.find("ul"),t=e.find("li").length;if(t>=d){var n=e.find("li").eq(0);e.prev().hasClass("layim-chat-system")||e.before('
          查看更多记录
          '),t>d&&n.remove()}a.scrollTop(a[0].scrollHeight+1e3),a.find("ul li:last").find("img").load(function(){a.scrollTop(a[0].scrollHeight+1e3)})},Q=function(){var i=_(),a=i.textarea;a.focus(),a.off("keydown").on("keydown",function(i){var e=layui.data("layim")[j.mine.id]||{},t=i.keyCode;if("Ctrl+Enter"===e.sendHotKey)return void(i.ctrlKey&&13===t&&D());if(13===t){if(i.ctrlKey)return a.val(a.val()+"\n");if(i.shiftKey)return;i.preventDefault(),D()}})},X=function(){var i=["[微笑]","[嘻嘻]","[哈哈]","[可爱]","[可怜]","[挖鼻]","[吃惊]","[害羞]","[挤眼]","[闭嘴]","[鄙视]","[爱你]","[泪]","[偷笑]","[亲亲]","[生病]","[太开心]","[白眼]","[右哼哼]","[左哼哼]","[嘘]","[衰]","[委屈]","[吐]","[哈欠]","[抱抱]","[怒]","[疑问]","[馋嘴]","[拜拜]","[思考]","[汗]","[困]","[睡]","[钱]","[失望]","[酷]","[色]","[哼]","[鼓掌]","[晕]","[悲伤]","[抓狂]","[黑线]","[阴险]","[怒骂]","[互粉]","[心]","[伤心]","[猪头]","[熊猫]","[兔子]","[ok]","[耶]","[good]","[NO]","[赞]","[来]","[弱]","[草泥马]","[神马]","[囧]","[浮云]","[给力]","[围观]","[威武]","[奥特曼]","[礼物]","[钟]","[话筒]","[蜡烛]","[蛋糕]"],a={};return layui.each(i,function(i,e){a[e]=layui.cache.dir+"images/face/"+i+".gif"}),a}(),ii=layui.stope,ai=function(i,a){var e,t=i.value;i.focus(),document.selection?(e=document.selection.createRange(),document.selection.empty(),e.text=a):(e=[t.substring(0,i.selectionStart),a,t.substr(i.selectionEnd)],i.focus(),i.value=e.join(""))},ei="layui-anim-upbit",ti={status:function(i,a){var t=function(){i.next().hide().removeClass(ei)},n=i.attr("lay-type");if("show"===n)ii(a),i.next().show().addClass(ei),e(document).off("click",t).on("click",t);else{var l=i.parent().prev();i.addClass(o).siblings().removeClass(o),l.html(i.find("cite").html()),l.removeClass("layim-status-"+("online"===n?"hide":"online")).addClass("layim-status-"+n),layui.each(r.online,function(i,a){a&&a(n)})}},sign:function(){var i=x.find(".layui-layim-remark");i.on("change",function(){var i=this.value;layui.each(r.sign,function(a,e){e&&e(i)})}),i.on("keyup",function(i){var a=i.keyCode;13===a&&this.blur()})},tab:function(i){var a,e=".layim-tab-content",t=x.find(".layui-layim-tab>li");"number"==typeof i?(a=i,i=t.eq(a)):a=i.index(),a>2?t.removeClass(o):(ti.tab.index=a,i.addClass(o).siblings().removeClass(o)),x.find(e).eq(a).addClass(s).siblings(e).removeClass(s)},spread:function(i){var a=i.attr("lay-type"),e="true"===a?"false":"true",t=layui.data("layim")[j.mine.id]||{};i.next()["true"===a?"removeClass":"addClass"](s),t["spread"+i.parent().index()]=e,layui.data("layim",{key:j.mine.id,value:t}),i.attr("lay-type",e),i.find(".layui-icon").html("true"===e?"":"")},search:function(i){var a=x.find(".layui-layim-search"),e=x.find("#layui-layim-search"),t=a.find("input"),n=function(i){var a=t.val().replace(/\s/);if(""===a)ti.tab(0|ti.tab.index);else{for(var n=[],l=j.friend||[],s=j.group||[],o="",d=0;d0)for(var u=0;u'+(n[u].username||n[u].groupname||"佚名")+"

          "+(n[u].remark||n[u].sign||"")+"

          ";else o='
        • 无搜索结果
        • ';e.html(o),ti.tab(3)}};!j.base.isfriend&&j.base.isgroup?ti.tab.index=1:j.base.isfriend||j.base.isgroup||(ti.tab.index=2),a.show(),t.focus(),t.off("keyup",n).on("keyup",n)},closeSearch:function(i){i.parent().hide(),ti.tab(0|ti.tab.index)},msgbox:function(){var i=x.find(".layim-tool-msgbox");return t.close(ti.msgbox.index),i.find("span").removeClass(Y).html(""),ti.msgbox.index=t.open({type:2,title:"消息盒子",shade:!1,maxmin:!0,area:["600px","520px"],skin:"layui-box layui-layer-border",resize:!1,content:j.base.msgbox})},find:function(){return t.close(ti.find.index),ti.find.index=t.open({type:2,title:"查找",shade:!1,maxmin:!0,area:["1000px","520px"],skin:"layui-box layui-layer-border",resize:!1,content:j.base.find})},skin:function(){t.open({type:1,title:"更换背景",shade:!1,area:"300px",skin:"layui-box layui-layer-border",id:"layui-layim-skin",zIndex:66666666,resize:!1,content:n(m).render({skin:j.base.skin})})},about:function(){t.alert("版本: "+a+'
          版权所有:layim.layui.com',{title:"关于 LayIM",shade:!1})},setSkin:function(i){var a=i.attr("src"),e=layui.data("layim")[j.mine.id]||{};e.skin=a,a||delete e.skin,layui.data("layim",{key:j.mine.id,value:e});try{x.css({"background-image":a?"url("+a+")":"none"}),w.css({"background-image":a?"url("+a+")":"none"})}catch(t){}layui.each(r.setSkin,function(i,e){var t=(a||"").replace(layui.cache.dir+"css/modules/layim/skin/","");e&&e(t,a)})},chat:function(i){var a=layui.data("layim")[j.mine.id]||{},e=i.data("type"),t=i.data("index"),n=i.attr("data-list")||i.index(),l={};"friend"===e?l=j[e][t].list[n]:"group"===e?l=j[e][n]:"history"===e&&(l=(a.history||{})[t]||{}),l.name=l.name||l.username||l.groupname,"history"!==e&&(l.type=e),z(l)},tabChat:function(i){O(i)},closeChat:function(i,a){O(i.parent(),1),ii(a)},closeThisChat:function(){O(null,1)},groupMembers:function(i,a){var n=i.find(".layui-icon"),l=function(){n.html(""),i.data("down",null),t.close(ti.groupMembers.index)},s=function(i){ii(i)};i.data("down")?l():(n.html(""),i.data("down",!0),ti.groupMembers.index=t.tips('
            ',i,{tips:3,time:0,anim:5,fixed:!0,skin:"layui-box layui-layim-members",success:function(a){var t=j.base.members||{},n=_(),s=a.find(".layim-members-list"),o="",d={},c=w.find(".layui-layer-max").hasClass("layui-layer-maxmin"),u="none"===w.find(".layim-chat-list").css("display");c&&s.css({width:e(window).width()-22-(u||200)}),t.data=e.extend(t.data,{id:n.data.id}),S(t,function(a){layui.each(a.list,function(i,a){o+='
          • '+a.username+"
          • ",d[a.id]=a}),s.html(o),i.find(".layim-chat-members").html(a.members||(a.list||[]).length+"人"),s.find("li").on("click",function(){var i=e(this).data("uid"),a=d[i];z({name:a.username,type:"friend",avatar:a.avatar,id:a.id}),l()}),layui.each(r.members,function(i,e){e&&e(a)})}),a.on("mousedown",function(i){ii(i)})}}),e(document).off("mousedown",l).on("mousedown",l),e(window).off("resize",l).on("resize",l),i.off("mousedown",s).on("mousedown",s))},send:function(){D()},setSend:function(i,a){var t=ti.setSend.box=i.siblings(".layim-menu-box"),n=i.attr("lay-type");if("show"===n)ii(a),t.show().addClass(ei),e(document).off("click",ti.setSendHide).on("click",ti.setSendHide);else{i.addClass(o).siblings().removeClass(o);var l=layui.data("layim")[j.mine.id]||{};l.sendHotKey=n,layui.data("layim",{key:j.mine.id,value:l}),ti.setSendHide(a,i.parent())}},setSendHide:function(i,a){(a||ti.setSend.box).hide().removeClass(ei)},face:function(i,a){var n="",l=_();for(var s in X)n+='
          • ';n='
              '+n+"
            ",ti.face.index=t.tips(n,i,{tips:1,time:0,fixed:!0,skin:"layui-box layui-layim-face",success:function(i){i.find(".layim-face-list>li").on("mousedown",function(i){ii(i)}).on("click",function(){ai(l.textarea[0],"face"+this.title+" "),t.close(ti.face.index); -})}}),e(document).off("mousedown",ti.faceHide).on("mousedown",ti.faceHide),e(window).off("resize",ti.faceHide).on("resize",ti.faceHide),ii(a)},faceHide:function(){t.close(ti.face.index)},image:function(i){var a=i.data("type")||"images",e={images:"uploadImage",file:"uploadFile"},n=_(),l=j.base[e[a]]||{};layui.upload.render({url:l.url||"",method:l.type,elem:i.find("input")[0],accept:a,done:function(i){0==i.code?(i.data=i.data||{},"images"===a?ai(n.textarea[0],"img["+(i.data.src||"")+"]"):"file"===a&&ai(n.textarea[0],"file("+(i.data.src||"")+")["+(i.data.name||"下载文件")+"]"),D()):t.msg(i.msg||"上传失败")}})},media:function(i){var a=i.data("type"),n={audio:"音频",video:"视频"},l=_();t.prompt({title:"请输入网络"+n[a]+"地址",shade:!1,offset:[i.offset().top-e(window).scrollTop()-158+"px",i.offset().left+"px"]},function(i,e){ai(l.textarea[0],a+"["+i+"]"),D(),t.close(e)})},extend:function(i){var a=i.attr("lay-filter"),e=_();layui.each(r["tool("+a+")"],function(a,t){t&&t.call(i,function(i){ai(e.textarea[0],i)},D,e)})},playAudio:function(i){var a=i.data("audio"),e=a||document.createElement("audio"),n=function(){e.pause(),i.removeAttr("status"),i.find("i").html("")};return i.data("error")?t.msg("播放音频源异常"):e.play?void(i.attr("status")?n():(a||(e.src=i.data("src")),e.play(),i.attr("status","pause"),i.data("audio",e),i.find("i").html(""),e.onended=function(){n()},e.onerror=function(){t.msg("播放音频源异常"),i.data("error",!0),n()})):t.msg("您的浏览器不支持audio")},playVideo:function(i){var a=i.data("src"),e=document.createElement("video");return e.play?(t.close(ti.playVideo.index),void(ti.playVideo.index=t.open({type:1,title:"播放视频",area:["460px","300px"],maxmin:!0,shade:!1,content:'
            '}))):t.msg("您的浏览器不支持video")},chatLog:function(i){var a=_();return j.base.chatLog?(t.close(ti.chatLog.index),ti.chatLog.index=t.open({type:2,maxmin:!0,title:"与 "+a.data.name+" 的聊天记录",area:["450px","100%"],shade:!1,offset:"rb",skin:"layui-box",anim:2,id:"layui-layim-chatlog",content:j.base.chatLog+"?id="+a.data.id+"&type="+a.data.type})):t.msg("未开启更多聊天记录")},menuHistory:function(i,a){var n=layui.data("layim")[j.mine.id]||{},l=i.parent(),s=i.data("type"),o=x.find(".layim-list-history"),d='
          • 暂无历史会话
          • ';if("one"===s){var r=n.history;delete r[l.data("index")],n.history=r,layui.data("layim",{key:j.mine.id,value:n}),e("#"+l.data("id")).remove(),0===o.find("li").length&&o.html(d)}else"all"===s&&(delete n.history,layui.data("layim",{key:j.mine.id,value:n}),o.html(d));t.closeAll("tips")}};i("layim",new c)}).addcss("modules/layim/layim.css?v=3.7.7","skinlayimcss"); \ No newline at end of file diff --git a/root/res/layui/lay/modules/rate.js b/root/res/layui/lay/modules/rate.js deleted file mode 100644 index 3c98909..0000000 --- a/root/res/layui/lay/modules/rate.js +++ /dev/null @@ -1,2 +0,0 @@ -/** layui-v2.3.0 MIT License By https://www.layui.com */ - ;layui.define("jquery",function(e){"use strict";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n="rate",t="layui-rate",o="layui-icon-rate",s="layui-icon-rate-solid",u="layui-icon-rate-half",r="layui-icon-rate-solid layui-icon-rate-half",c="layui-icon-rate-solid layui-icon-rate",f="layui-icon-rate layui-icon-rate-half",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':"";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='
              ",u=1;u<=i.length;u++){var r='
            • ";i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)?n=n+'
            • ":n+=r}n+="
            "+(i.text?''+i.value+"星":"")+"";var c=i.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next("span"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass("layui-inline"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width();l.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next("span").text(i.value+"星"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on("mousemove",function(e){if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(u).removeClass(s)}}),v.on("mouseleave",function(){l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)}); \ No newline at end of file diff --git a/root/res/wangEditor/fonts/w-e-icon.woff b/root/res/wangEditor/fonts/w-e-icon.woff deleted file mode 100644 index 6dc5b5a33ab856629748dba686540870da73e89f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6224 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 0 && matches.item(i) !== this) {} - return i > -1; - }; - } -}; - -/* - DOM 操作 API -*/ - -// 根据 html 代码片段创建 dom 对象 -function createElemByHTML(html) { - var div = void 0; - div = document.createElement('div'); - div.innerHTML = html; - return div.children; -} - -// 是否是 DOM List -function isDOMList(selector) { - if (!selector) { - return false; - } - if (selector instanceof HTMLCollection || selector instanceof NodeList) { - return true; - } - return false; -} - -// 封装 document.querySelectorAll -function querySelectorAll(selector) { - var result = document.querySelectorAll(selector); - if (isDOMList(result)) { - return result; - } else { - return [result]; - } -} - -// 记录所有的事件绑定 -var eventList = []; - -// 创建构造函数 -function DomElement(selector) { - if (!selector) { - return; - } - - // selector 本来就是 DomElement 对象,直接返回 - if (selector instanceof DomElement) { - return selector; - } - - this.selector = selector; - var nodeType = selector.nodeType; - - // 根据 selector 得出的结果(如 DOM,DOM List) - var selectorResult = []; - if (nodeType === 9) { - // document 节点 - selectorResult = [selector]; - } else if (nodeType === 1) { - // 单个 DOM 节点 - selectorResult = [selector]; - } else if (isDOMList(selector) || selector instanceof Array) { - // DOM List 或者数组 - selectorResult = selector; - } else if (typeof selector === 'string') { - // 字符串 - selector = selector.replace('/\n/mg', '').trim(); - if (selector.indexOf('<') === 0) { - // 如
            - selectorResult = createElemByHTML(selector); - } else { - // 如 #id .class - selectorResult = querySelectorAll(selector); - } - } - - var length = selectorResult.length; - if (!length) { - // 空数组 - return this; - } - - // 加入 DOM 节点 - var i = void 0; - for (i = 0; i < length; i++) { - this[i] = selectorResult[i]; - } - this.length = length; -} - -// 修改原型 -DomElement.prototype = { - constructor: DomElement, - - // 类数组,forEach - forEach: function forEach(fn) { - var i = void 0; - for (i = 0; i < this.length; i++) { - var elem = this[i]; - var result = fn.call(elem, elem, i); - if (result === false) { - break; - } - } - return this; - }, - - // clone - clone: function clone(deep) { - var cloneList = []; - this.forEach(function (elem) { - cloneList.push(elem.cloneNode(!!deep)); - }); - return $(cloneList); - }, - - // 获取第几个元素 - get: function get(index) { - var length = this.length; - if (index >= length) { - index = index % length; - } - return $(this[index]); - }, - - // 第一个 - first: function first() { - return this.get(0); - }, - - // 最后一个 - last: function last() { - var length = this.length; - return this.get(length - 1); - }, - - // 绑定事件 - on: function on(type, selector, fn) { - // selector 不为空,证明绑定事件要加代理 - if (!fn) { - fn = selector; - selector = null; - } - - // type 是否有多个 - var types = []; - types = type.split(/\s+/); - - return this.forEach(function (elem) { - types.forEach(function (type) { - if (!type) { - return; - } - - // 记录下,方便后面解绑 - eventList.push({ - elem: elem, - type: type, - fn: fn - }); - - if (!selector) { - // 无代理 - elem.addEventListener(type, fn); - return; - } - - // 有代理 - elem.addEventListener(type, function (e) { - var target = e.target; - if (target.matches(selector)) { - fn.call(target, e); - } - }); - }); - }); - }, - - // 取消事件绑定 - off: function off(type, fn) { - return this.forEach(function (elem) { - elem.removeEventListener(type, fn); - }); - }, - - // 获取/设置 属性 - attr: function attr(key, val) { - if (val == null) { - // 获取值 - return this[0].getAttribute(key); - } else { - // 设置值 - return this.forEach(function (elem) { - elem.setAttribute(key, val); - }); - } - }, - - // 添加 class - addClass: function addClass(className) { - if (!className) { - return this; - } - return this.forEach(function (elem) { - var arr = void 0; - if (elem.className) { - // 解析当前 className 转换为数组 - arr = elem.className.split(/\s/); - arr = arr.filter(function (item) { - return !!item.trim(); - }); - // 添加 class - if (arr.indexOf(className) < 0) { - arr.push(className); - } - // 修改 elem.class - elem.className = arr.join(' '); - } else { - elem.className = className; - } - }); - }, - - // 删除 class - removeClass: function removeClass(className) { - if (!className) { - return this; - } - return this.forEach(function (elem) { - var arr = void 0; - if (elem.className) { - // 解析当前 className 转换为数组 - arr = elem.className.split(/\s/); - arr = arr.filter(function (item) { - item = item.trim(); - // 删除 class - if (!item || item === className) { - return false; - } - return true; - }); - // 修改 elem.class - elem.className = arr.join(' '); - } - }); - }, - - // 修改 css - css: function css(key, val) { - var currentStyle = key + ':' + val + ';'; - return this.forEach(function (elem) { - var style = (elem.getAttribute('style') || '').trim(); - var styleArr = void 0, - resultArr = []; - if (style) { - // 将 style 按照 ; 拆分为数组 - styleArr = style.split(';'); - styleArr.forEach(function (item) { - // 对每项样式,按照 : 拆分为 key 和 value - var arr = item.split(':').map(function (i) { - return i.trim(); - }); - if (arr.length === 2) { - resultArr.push(arr[0] + ':' + arr[1]); - } - }); - // 替换或者新增 - resultArr = resultArr.map(function (item) { - if (item.indexOf(key) === 0) { - return currentStyle; - } else { - return item; - } - }); - if (resultArr.indexOf(currentStyle) < 0) { - resultArr.push(currentStyle); - } - // 结果 - elem.setAttribute('style', resultArr.join('; ')); - } else { - // style 无值 - elem.setAttribute('style', currentStyle); - } - }); - }, - - // 显示 - show: function show() { - return this.css('display', 'block'); - }, - - // 隐藏 - hide: function hide() { - return this.css('display', 'none'); - }, - - // 获取子节点 - children: function children() { - var elem = this[0]; - if (!elem) { - return null; - } - - return $(elem.children); - }, - - // 获取子节点(包括文本节点) - childNodes: function childNodes() { - var elem = this[0]; - if (!elem) { - return null; - } - - return $(elem.childNodes); - }, - - // 增加子节点 - append: function append($children) { - return this.forEach(function (elem) { - $children.forEach(function (child) { - elem.appendChild(child); - }); - }); - }, - - // 移除当前节点 - remove: function remove() { - return this.forEach(function (elem) { - if (elem.remove) { - elem.remove(); - } else { - var parent = elem.parentElement; - parent && parent.removeChild(elem); - } - }); - }, - - // 是否包含某个子节点 - isContain: function isContain($child) { - var elem = this[0]; - var child = $child[0]; - return elem.contains(child); - }, - - // 尺寸数据 - getSizeData: function getSizeData() { - var elem = this[0]; - return elem.getBoundingClientRect(); // 可得到 bottom height left right top width 的数据 - }, - - // 封装 nodeName - getNodeName: function getNodeName() { - var elem = this[0]; - return elem.nodeName; - }, - - // 从当前元素查找 - find: function find(selector) { - var elem = this[0]; - return $(elem.querySelectorAll(selector)); - }, - - // 获取当前元素的 text - text: function text(val) { - if (!val) { - // 获取 text - var elem = this[0]; - return elem.innerHTML.replace(/<.*?>/g, function () { - return ''; - }); - } else { - // 设置 text - return this.forEach(function (elem) { - elem.innerHTML = val; - }); - } - }, - - // 获取 html - html: function html(value) { - var elem = this[0]; - if (value == null) { - return elem.innerHTML; - } else { - elem.innerHTML = value; - return this; - } - }, - - // 获取 value - val: function val() { - var elem = this[0]; - return elem.value.trim(); - }, - - // focus - focus: function focus() { - return this.forEach(function (elem) { - elem.focus(); - }); - }, - - // parent - parent: function parent() { - var elem = this[0]; - return $(elem.parentElement); - }, - - // parentUntil 找到符合 selector 的父节点 - parentUntil: function parentUntil(selector, _currentElem) { - var results = document.querySelectorAll(selector); - var length = results.length; - if (!length) { - // 传入的 selector 无效 - return null; - } - - var elem = _currentElem || this[0]; - if (elem.nodeName === 'BODY') { - return null; - } - - var parent = elem.parentElement; - var i = void 0; - for (i = 0; i < length; i++) { - if (parent === results[i]) { - // 找到,并返回 - return $(parent); - } - } - - // 继续查找 - return this.parentUntil(selector, parent); - }, - - // 判断两个 elem 是否相等 - equal: function equal($elem) { - if ($elem.nodeType === 1) { - return this[0] === $elem; - } else { - return this[0] === $elem[0]; - } - }, - - // 将该元素插入到某个元素前面 - insertBefore: function insertBefore(selector) { - var $referenceNode = $(selector); - var referenceNode = $referenceNode[0]; - if (!referenceNode) { - return this; - } - return this.forEach(function (elem) { - var parent = referenceNode.parentNode; - parent.insertBefore(elem, referenceNode); - }); - }, - - // 将该元素插入到某个元素后面 - insertAfter: function insertAfter(selector) { - var $referenceNode = $(selector); - var referenceNode = $referenceNode[0]; - if (!referenceNode) { - return this; - } - return this.forEach(function (elem) { - var parent = referenceNode.parentNode; - if (parent.lastChild === referenceNode) { - // 最后一个元素 - parent.appendChild(elem); - } else { - // 不是最后一个元素 - parent.insertBefore(elem, referenceNode.nextSibling); - } - }); - } -}; - -// new 一个对象 -function $(selector) { - return new DomElement(selector); -} - -// 解绑所有事件,用于销毁编辑器 -$.offAll = function () { - eventList.forEach(function (item) { - var elem = item.elem; - var type = item.type; - var fn = item.fn; - // 解绑 - elem.removeEventListener(type, fn); - }); -}; - -/* - 配置信息 -*/ - -var config = { - - // 默认菜单配置 - menus: ['head', 'bold', 'fontSize', 'fontName', 'italic', 'underline', 'strikeThrough', 'foreColor', 'backColor', 'link', 'list', 'justify', 'quote', 'emoticon', 'image', 'table', 'video', 'code', 'undo', 'redo'], - - fontNames: ['宋体', '微软雅黑', 'Arial', 'Tahoma', 'Verdana'], - - colors: ['#000000', '#eeece0', '#1c487f', '#4d80bf', '#c24f4a', '#8baa4a', '#7b5ba1', '#46acc8', '#f9963b', '#ffffff'], - - // // 语言配置 - // lang: { - // '设置标题': 'title', - // '正文': 'p', - // '链接文字': 'link text', - // '链接': 'link', - // '插入': 'insert', - // '创建': 'init' - // }, - - // 表情 - emotions: [{ - // tab 的标题 - title: '默认', - // type -> 'emoji' / 'image' - type: 'image', - // content -> 数组 - content: [{ - alt: '[坏笑]', - src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/pcmoren_huaixiao_org.png' - }, { - alt: '[舔屏]', - src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/pcmoren_tian_org.png' - }, { - alt: '[污]', - src: 'http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/pcmoren_wu_org.png' - }] - }, { - // tab 的标题 - title: '新浪', - // type -> 'emoji' / 'image' - type: 'image', - // content -> 数组 - content: [{ - src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/7a/shenshou_thumb.gif', - alt: '[草泥马]' - }, { - src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/60/horse2_thumb.gif', - alt: '[神马]' - }, { - src: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/bc/fuyun_thumb.gif', - alt: '[浮云]' - }] - }, { - // tab 的标题 - title: 'emoji', - // type -> 'emoji' / 'image' - type: 'emoji', - // content -> 数组 - content: '😀 😃 😄 😁 😆 😅 😂 😊 😇 🙂 🙃 😉 😓 😪 😴 🙄 🤔 😬 🤐'.split(/\s/) - }], - - // 编辑区域的 z-index - zIndex: 10000, - - // 是否开启 debug 模式(debug 模式下错误会 throw error 形式抛出) - debug: false, - - // 插入链接时候的格式校验 - linkCheck: function linkCheck(text, link) { - // text 是插入的文字 - // link 是插入的链接 - return true; // 返回 true 即表示成功 - // return '校验失败' // 返回字符串即表示失败的提示信息 - }, - - // 插入网络图片的校验 - linkImgCheck: function linkImgCheck(src) { - // src 即图片的地址 - return true; // 返回 true 即表示成功 - // return '校验失败' // 返回字符串即表示失败的提示信息 - }, - - // 粘贴过滤样式,默认开启 - pasteFilterStyle: true, - - // 粘贴内容时,忽略图片。默认关闭 - pasteIgnoreImg: false, - - // 对粘贴的文字进行自定义处理,返回处理后的结果。编辑器会将处理后的结果粘贴到编辑区域中。 - // IE 暂时不支持 - pasteTextHandle: function pasteTextHandle(content) { - // content 即粘贴过来的内容(html 或 纯文本),可进行自定义处理然后返回 - return content; - }, - - // onchange 事件 - // onchange: function (html) { - // // html 即变化之后的内容 - // console.log(html) - // }, - - // 是否显示添加网络图片的 tab - showLinkImg: true, - - // 插入网络图片的回调 - linkImgCallback: function linkImgCallback(url) { - // console.log(url) // url 即插入图片的地址 - }, - - // 默认上传图片 max size: 5M - uploadImgMaxSize: 5 * 1024 * 1024, - - // 配置一次最多上传几个图片 - // uploadImgMaxLength: 5, - - // 上传图片,是否显示 base64 格式 - uploadImgShowBase64: false, - - // 上传图片,server 地址(如果有值,则 base64 格式的配置则失效) - // uploadImgServer: '/upload', - - // 自定义配置 filename - uploadFileName: '', - - // 上传图片的自定义参数 - uploadImgParams: { - // token: 'abcdef12345' - }, - - // 上传图片的自定义header - uploadImgHeaders: { - // 'Accept': 'text/x-json' - }, - - // 配置 XHR withCredentials - withCredentials: false, - - // 自定义上传图片超时时间 ms - uploadImgTimeout: 10000, - - // 上传图片 hook - uploadImgHooks: { - // customInsert: function (insertLinkImg, result, editor) { - // console.log('customInsert') - // // 图片上传并返回结果,自定义插入图片的事件,而不是编辑器自动插入图片 - // const data = result.data1 || [] - // data.forEach(link => { - // insertLinkImg(link) - // }) - // }, - before: function before(xhr, editor, files) { - // 图片上传之前触发 - - // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传 - // return { - // prevent: true, - // msg: '放弃上传' - // } - }, - success: function success(xhr, editor, result) { - // 图片上传并返回结果,图片插入成功之后触发 - }, - fail: function fail(xhr, editor, result) { - // 图片上传并返回结果,但图片插入错误时触发 - }, - error: function error(xhr, editor) { - // 图片上传出错时触发 - }, - timeout: function timeout(xhr, editor) { - // 图片上传超时时触发 - } - }, - - // 是否上传七牛云,默认为 false - qiniu: false - -}; - -/* - 工具 -*/ - -// 和 UA 相关的属性 -var UA = { - _ua: navigator.userAgent, - - // 是否 webkit - isWebkit: function isWebkit() { - var reg = /webkit/i; - return reg.test(this._ua); - }, - - // 是否 IE - isIE: function isIE() { - return 'ActiveXObject' in window; - } -}; - -// 遍历对象 -function objForEach(obj, fn) { - var key = void 0, - result = void 0; - for (key in obj) { - if (obj.hasOwnProperty(key)) { - result = fn.call(obj, key, obj[key]); - if (result === false) { - break; - } - } - } -} - -// 遍历类数组 -function arrForEach(fakeArr, fn) { - var i = void 0, - item = void 0, - result = void 0; - var length = fakeArr.length || 0; - for (i = 0; i < length; i++) { - item = fakeArr[i]; - result = fn.call(fakeArr, item, i); - if (result === false) { - break; - } - } -} - -// 获取随机数 -function getRandom(prefix) { - return prefix + Math.random().toString().slice(2); -} - -// 替换 html 特殊字符 -function replaceHtmlSymbol(html) { - if (html == null) { - return ''; - } - return html.replace(//gm, '>').replace(/"/gm, '"').replace(/(\r\n|\r|\n)/g, '
            '); -} - -// 返回百分比的格式 - - -// 判断是不是 function -function isFunction(fn) { - return typeof fn === 'function'; -} - -/* - bold-menu -*/ -// 构造函数 -function Bold(editor) { - this.editor = editor; - this.$elem = $('
            \n \n
            '); - this.type = 'click'; - - // 当前是否 active 状态 - this._active = false; -} - -// 原型 -Bold.prototype = { - constructor: Bold, - - // 点击事件 - onClick: function onClick(e) { - // 点击菜单将触发这里 - - var editor = this.editor; - var isSeleEmpty = editor.selection.isSelectionEmpty(); - - if (isSeleEmpty) { - // 选区是空的,插入并选中一个“空白” - editor.selection.createEmptyRange(); - } - - // 执行 bold 命令 - editor.cmd.do('bold'); - - if (isSeleEmpty) { - // 需要将选取折叠起来 - editor.selection.collapseRange(); - editor.selection.restoreSelection(); - } - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - if (editor.cmd.queryCommandState('bold')) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); - } - } -}; - -/* - 替换多语言 - */ - -var replaceLang = function (editor, str) { - var langArgs = editor.config.langArgs || []; - var result = str; - - langArgs.forEach(function (item) { - var reg = item.reg; - var val = item.val; - - if (reg.test(result)) { - result = result.replace(reg, function () { - return val; - }); - } - }); - - return result; -}; - -/* - droplist -*/ -var _emptyFn = function _emptyFn() {}; - -// 构造函数 -function DropList(menu, opt) { - var _this = this; - - // droplist 所依附的菜单 - var editor = menu.editor; - this.menu = menu; - this.opt = opt; - // 容器 - var $container = $('
            '); - - // 标题 - var $title = opt.$title; - var titleHtml = void 0; - if ($title) { - // 替换多语言 - titleHtml = $title.html(); - titleHtml = replaceLang(editor, titleHtml); - $title.html(titleHtml); - - $title.addClass('w-e-dp-title'); - $container.append($title); - } - - var list = opt.list || []; - var type = opt.type || 'list'; // 'list' 列表形式(如“标题”菜单) / 'inline-block' 块状形式(如“颜色”菜单) - var onClick = opt.onClick || _emptyFn; - - // 加入 DOM 并绑定事件 - var $list = $('
              '); - $container.append($list); - list.forEach(function (item) { - var $elem = item.$elem; - - // 替换多语言 - var elemHtml = $elem.html(); - elemHtml = replaceLang(editor, elemHtml); - $elem.html(elemHtml); - - var value = item.value; - var $li = $('
            • '); - if ($elem) { - $li.append($elem); - $list.append($li); - $li.on('click', function (e) { - onClick(value); - - // 隐藏 - _this.hideTimeoutId = setTimeout(function () { - _this.hide(); - }, 0); - }); - } - }); - - // 绑定隐藏事件 - $container.on('mouseleave', function (e) { - _this.hideTimeoutId = setTimeout(function () { - _this.hide(); - }, 0); - }); - - // 记录属性 - this.$container = $container; - - // 基本属性 - this._rendered = false; - this._show = false; -} - -// 原型 -DropList.prototype = { - constructor: DropList, - - // 显示(插入DOM) - show: function show() { - if (this.hideTimeoutId) { - // 清除之前的定时隐藏 - clearTimeout(this.hideTimeoutId); - } - - var menu = this.menu; - var $menuELem = menu.$elem; - var $container = this.$container; - if (this._show) { - return; - } - if (this._rendered) { - // 显示 - $container.show(); - } else { - // 加入 DOM 之前先定位位置 - var menuHeight = $menuELem.getSizeData().height || 0; - var width = this.opt.width || 100; // 默认为 100 - $container.css('margin-top', menuHeight + 'px').css('width', width + 'px'); - - // 加入到 DOM - $menuELem.append($container); - this._rendered = true; - } - - // 修改属性 - this._show = true; - }, - - // 隐藏(移除DOM) - hide: function hide() { - if (this.showTimeoutId) { - // 清除之前的定时显示 - clearTimeout(this.showTimeoutId); - } - - var $container = this.$container; - if (!this._show) { - return; - } - // 隐藏并需改属性 - $container.hide(); - this._show = false; - } -}; - -/* - menu - header -*/ -// 构造函数 -function Head(editor) { - var _this = this; - - this.editor = editor; - this.$elem = $('
              '); - this.type = 'droplist'; - - // 当前是否 active 状态 - this._active = false; - - // 初始化 droplist - this.droplist = new DropList(this, { - width: 100, - $title: $('

              设置标题

              '), - type: 'list', // droplist 以列表形式展示 - list: [{ $elem: $('

              H1

              '), value: '

              ' }, { $elem: $('

              H2

              '), value: '

              ' }, { $elem: $('

              H3

              '), value: '

              ' }, { $elem: $('

              H4

              '), value: '

              ' }, { $elem: $('

              H5
              '), value: '
              ' }, { $elem: $('

              正文

              '), value: '

              ' }], - onClick: function onClick(value) { - // 注意 this 是指向当前的 Head 对象 - _this._command(value); - } - }); -} - -// 原型 -Head.prototype = { - constructor: Head, - - // 执行命令 - _command: function _command(value) { - var editor = this.editor; - - var $selectionElem = editor.selection.getSelectionContainerElem(); - if (editor.$textElem.equal($selectionElem)) { - // 不能选中多行来设置标题,否则会出现问题 - // 例如选中的是

              xxx

              yyy

              来设置标题,设置之后会成为

              xxx
              yyy

              不符合预期 - return; - } - - editor.cmd.do('formatBlock', value); - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - var reg = /^h/i; - var cmdValue = editor.cmd.queryCommandValue('formatBlock'); - if (reg.test(cmdValue)) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); - } - } -}; - -/* - menu - fontSize -*/ - -// 构造函数 -function FontSize(editor) { - var _this = this; - - this.editor = editor; - this.$elem = $('
              '); - this.type = 'droplist'; - - // 当前是否 active 状态 - this._active = false; - - // 初始化 droplist - this.droplist = new DropList(this, { - width: 160, - $title: $('

              字号

              '), - type: 'list', // droplist 以列表形式展示 - list: [{ $elem: $('x-small'), value: '1' }, { $elem: $('small'), value: '2' }, { $elem: $('normal'), value: '3' }, { $elem: $('large'), value: '4' }, { $elem: $('x-large'), value: '5' }, { $elem: $('xx-large'), value: '6' }], - onClick: function onClick(value) { - // 注意 this 是指向当前的 FontSize 对象 - _this._command(value); - } - }); -} - -// 原型 -FontSize.prototype = { - constructor: FontSize, - - // 执行命令 - _command: function _command(value) { - var editor = this.editor; - editor.cmd.do('fontSize', value); - } -}; - -/* - menu - fontName -*/ - -// 构造函数 -function FontName(editor) { - var _this = this; - - this.editor = editor; - this.$elem = $('
              '); - this.type = 'droplist'; - - // 当前是否 active 状态 - this._active = false; - - // 获取配置的字体 - var config = editor.config; - var fontNames = config.fontNames || []; - - // 初始化 droplist - this.droplist = new DropList(this, { - width: 100, - $title: $('

              字体

              '), - type: 'list', // droplist 以列表形式展示 - list: fontNames.map(function (fontName) { - return { $elem: $('' + fontName + ''), value: fontName }; - }), - onClick: function onClick(value) { - // 注意 this 是指向当前的 FontName 对象 - _this._command(value); - } - }); -} - -// 原型 -FontName.prototype = { - constructor: FontName, - - _command: function _command(value) { - var editor = this.editor; - editor.cmd.do('fontName', value); - } -}; - -/* - panel -*/ - -var emptyFn = function emptyFn() {}; - -// 记录已经显示 panel 的菜单 -var _isCreatedPanelMenus = []; - -// 构造函数 -function Panel(menu, opt) { - this.menu = menu; - this.opt = opt; -} - -// 原型 -Panel.prototype = { - constructor: Panel, - - // 显示(插入DOM) - show: function show() { - var _this = this; - - var menu = this.menu; - if (_isCreatedPanelMenus.indexOf(menu) >= 0) { - // 该菜单已经创建了 panel 不能再创建 - return; - } - - var editor = menu.editor; - var $body = $('body'); - var $textContainerElem = editor.$textContainerElem; - var opt = this.opt; - - // panel 的容器 - var $container = $('
              '); - var width = opt.width || 300; // 默认 300px - $container.css('width', width + 'px').css('margin-left', (0 - width) / 2 + 'px'); - - // 添加关闭按钮 - var $closeBtn = $(''); - $container.append($closeBtn); - $closeBtn.on('click', function () { - _this.hide(); - }); - - // 准备 tabs 容器 - var $tabTitleContainer = $('
                '); - var $tabContentContainer = $('
                '); - $container.append($tabTitleContainer).append($tabContentContainer); - - // 设置高度 - var height = opt.height; - if (height) { - $tabContentContainer.css('height', height + 'px').css('overflow-y', 'auto'); - } - - // tabs - var tabs = opt.tabs || []; - var tabTitleArr = []; - var tabContentArr = []; - tabs.forEach(function (tab, tabIndex) { - if (!tab) { - return; - } - var title = tab.title || ''; - var tpl = tab.tpl || ''; - - // 替换多语言 - title = replaceLang(editor, title); - tpl = replaceLang(editor, tpl); - - // 添加到 DOM - var $title = $('
              • ' + title + '
              • '); - $tabTitleContainer.append($title); - var $content = $(tpl); - $tabContentContainer.append($content); - - // 记录到内存 - $title._index = tabIndex; - tabTitleArr.push($title); - tabContentArr.push($content); - - // 设置 active 项 - if (tabIndex === 0) { - $title._active = true; - $title.addClass('w-e-active'); - } else { - $content.hide(); - } - - // 绑定 tab 的事件 - $title.on('click', function (e) { - if ($title._active) { - return; - } - // 隐藏所有的 tab - tabTitleArr.forEach(function ($title) { - $title._active = false; - $title.removeClass('w-e-active'); - }); - tabContentArr.forEach(function ($content) { - $content.hide(); - }); - - // 显示当前的 tab - $title._active = true; - $title.addClass('w-e-active'); - $content.show(); - }); - }); - - // 绑定关闭事件 - $container.on('click', function (e) { - // 点击时阻止冒泡 - e.stopPropagation(); - }); - $body.on('click', function (e) { - _this.hide(); - }); - - // 添加到 DOM - $textContainerElem.append($container); - - // 绑定 opt 的事件,只有添加到 DOM 之后才能绑定成功 - tabs.forEach(function (tab, index) { - if (!tab) { - return; - } - var events = tab.events || []; - events.forEach(function (event) { - var selector = event.selector; - var type = event.type; - var fn = event.fn || emptyFn; - var $content = tabContentArr[index]; - $content.find(selector).on(type, function (e) { - e.stopPropagation(); - var needToHide = fn(e); - // 执行完事件之后,是否要关闭 panel - if (needToHide) { - _this.hide(); - } - }); - }); - }); - - // focus 第一个 elem - var $inputs = $container.find('input[type=text],textarea'); - if ($inputs.length) { - $inputs.get(0).focus(); - } - - // 添加到属性 - this.$container = $container; - - // 隐藏其他 panel - this._hideOtherPanels(); - // 记录该 menu 已经创建了 panel - _isCreatedPanelMenus.push(menu); - }, - - // 隐藏(移除DOM) - hide: function hide() { - var menu = this.menu; - var $container = this.$container; - if ($container) { - $container.remove(); - } - - // 将该 menu 记录中移除 - _isCreatedPanelMenus = _isCreatedPanelMenus.filter(function (item) { - if (item === menu) { - return false; - } else { - return true; - } - }); - }, - - // 一个 panel 展示时,隐藏其他 panel - _hideOtherPanels: function _hideOtherPanels() { - if (!_isCreatedPanelMenus.length) { - return; - } - _isCreatedPanelMenus.forEach(function (menu) { - var panel = menu.panel || {}; - if (panel.hide) { - panel.hide(); - } - }); - } -}; - -/* - menu - link -*/ -// 构造函数 -function Link(editor) { - this.editor = editor; - this.$elem = $('
                '); - this.type = 'panel'; - - // 当前是否 active 状态 - this._active = false; -} - -// 原型 -Link.prototype = { - constructor: Link, - - // 点击事件 - onClick: function onClick(e) { - var editor = this.editor; - var $linkelem = void 0; - - if (this._active) { - // 当前选区在链接里面 - $linkelem = editor.selection.getSelectionContainerElem(); - if (!$linkelem) { - return; - } - // 将该元素都包含在选取之内,以便后面整体替换 - editor.selection.createRangeByElem($linkelem); - editor.selection.restoreSelection(); - // 显示 panel - this._createPanel($linkelem.text(), $linkelem.attr('href')); - } else { - // 当前选区不在链接里面 - if (editor.selection.isSelectionEmpty()) { - // 选区是空的,未选中内容 - this._createPanel('', ''); - } else { - // 选中内容了 - this._createPanel(editor.selection.getSelectionText(), ''); - } - } - }, - - // 创建 panel - _createPanel: function _createPanel(text, link) { - var _this = this; - - // panel 中需要用到的id - var inputLinkId = getRandom('input-link'); - var inputTextId = getRandom('input-text'); - var btnOkId = getRandom('btn-ok'); - var btnDelId = getRandom('btn-del'); - - // 是否显示“删除链接” - var delBtnDisplay = this._active ? 'inline-block' : 'none'; - - // 初始化并显示 panel - var panel = new Panel(this, { - width: 300, - // panel 中可包含多个 tab - tabs: [{ - // tab 的标题 - title: '链接', - // 模板 - tpl: '
                \n \n \n
                \n \n \n
                \n
                ', - // 事件绑定 - events: [ - // 插入链接 - { - selector: '#' + btnOkId, - type: 'click', - fn: function fn() { - // 执行插入链接 - var $link = $('#' + inputLinkId); - var $text = $('#' + inputTextId); - var link = $link.val(); - var text = $text.val(); - _this._insertLink(text, link); - - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }, - // 删除链接 - { - selector: '#' + btnDelId, - type: 'click', - fn: function fn() { - // 执行删除链接 - _this._delLink(); - - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }] - } // tab end - ] // tabs end - }); - - // 显示 panel - panel.show(); - - // 记录属性 - this.panel = panel; - }, - - // 删除当前链接 - _delLink: function _delLink() { - if (!this._active) { - return; - } - var editor = this.editor; - var $selectionELem = editor.selection.getSelectionContainerElem(); - if (!$selectionELem) { - return; - } - var selectionText = editor.selection.getSelectionText(); - editor.cmd.do('insertHTML', '' + selectionText + ''); - }, - - // 插入链接 - _insertLink: function _insertLink(text, link) { - var editor = this.editor; - var config = editor.config; - var linkCheck = config.linkCheck; - var checkResult = true; // 默认为 true - if (linkCheck && typeof linkCheck === 'function') { - checkResult = linkCheck(text, link); - } - if (checkResult === true) { - editor.cmd.do('insertHTML', '' + text + ''); - } else { - alert(checkResult); - } - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - var $selectionELem = editor.selection.getSelectionContainerElem(); - if (!$selectionELem) { - return; - } - if ($selectionELem.getNodeName() === 'A') { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); - } - } -}; - -/* - italic-menu -*/ -// 构造函数 -function Italic(editor) { - this.editor = editor; - this.$elem = $('
                \n \n
                '); - this.type = 'click'; - - // 当前是否 active 状态 - this._active = false; -} - -// 原型 -Italic.prototype = { - constructor: Italic, - - // 点击事件 - onClick: function onClick(e) { - // 点击菜单将触发这里 - - var editor = this.editor; - var isSeleEmpty = editor.selection.isSelectionEmpty(); - - if (isSeleEmpty) { - // 选区是空的,插入并选中一个“空白” - editor.selection.createEmptyRange(); - } - - // 执行 italic 命令 - editor.cmd.do('italic'); - - if (isSeleEmpty) { - // 需要将选取折叠起来 - editor.selection.collapseRange(); - editor.selection.restoreSelection(); - } - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - if (editor.cmd.queryCommandState('italic')) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); - } - } -}; - -/* - redo-menu -*/ -// 构造函数 -function Redo(editor) { - this.editor = editor; - this.$elem = $('
                \n \n
                '); - this.type = 'click'; - - // 当前是否 active 状态 - this._active = false; -} - -// 原型 -Redo.prototype = { - constructor: Redo, - - // 点击事件 - onClick: function onClick(e) { - // 点击菜单将触发这里 - - var editor = this.editor; - - // 执行 redo 命令 - editor.cmd.do('redo'); - } -}; - -/* - strikeThrough-menu -*/ -// 构造函数 -function StrikeThrough(editor) { - this.editor = editor; - this.$elem = $('
                \n \n
                '); - this.type = 'click'; - - // 当前是否 active 状态 - this._active = false; -} - -// 原型 -StrikeThrough.prototype = { - constructor: StrikeThrough, - - // 点击事件 - onClick: function onClick(e) { - // 点击菜单将触发这里 - - var editor = this.editor; - var isSeleEmpty = editor.selection.isSelectionEmpty(); - - if (isSeleEmpty) { - // 选区是空的,插入并选中一个“空白” - editor.selection.createEmptyRange(); - } - - // 执行 strikeThrough 命令 - editor.cmd.do('strikeThrough'); - - if (isSeleEmpty) { - // 需要将选取折叠起来 - editor.selection.collapseRange(); - editor.selection.restoreSelection(); - } - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - if (editor.cmd.queryCommandState('strikeThrough')) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); - } - } -}; - -/* - underline-menu -*/ -// 构造函数 -function Underline(editor) { - this.editor = editor; - this.$elem = $('
                \n \n
                '); - this.type = 'click'; - - // 当前是否 active 状态 - this._active = false; -} - -// 原型 -Underline.prototype = { - constructor: Underline, - - // 点击事件 - onClick: function onClick(e) { - // 点击菜单将触发这里 - - var editor = this.editor; - var isSeleEmpty = editor.selection.isSelectionEmpty(); - - if (isSeleEmpty) { - // 选区是空的,插入并选中一个“空白” - editor.selection.createEmptyRange(); - } - - // 执行 underline 命令 - editor.cmd.do('underline'); - - if (isSeleEmpty) { - // 需要将选取折叠起来 - editor.selection.collapseRange(); - editor.selection.restoreSelection(); - } - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - if (editor.cmd.queryCommandState('underline')) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); - } - } -}; - -/* - undo-menu -*/ -// 构造函数 -function Undo(editor) { - this.editor = editor; - this.$elem = $('
                \n \n
                '); - this.type = 'click'; - - // 当前是否 active 状态 - this._active = false; -} - -// 原型 -Undo.prototype = { - constructor: Undo, - - // 点击事件 - onClick: function onClick(e) { - // 点击菜单将触发这里 - - var editor = this.editor; - - // 执行 undo 命令 - editor.cmd.do('undo'); - } -}; - -/* - menu - list -*/ -// 构造函数 -function List(editor) { - var _this = this; - - this.editor = editor; - this.$elem = $('
                '); - this.type = 'droplist'; - - // 当前是否 active 状态 - this._active = false; - - // 初始化 droplist - this.droplist = new DropList(this, { - width: 120, - $title: $('

                设置列表

                '), - type: 'list', // droplist 以列表形式展示 - list: [{ $elem: $(' 有序列表'), value: 'insertOrderedList' }, { $elem: $(' 无序列表'), value: 'insertUnorderedList' }], - onClick: function onClick(value) { - // 注意 this 是指向当前的 List 对象 - _this._command(value); - } - }); -} - -// 原型 -List.prototype = { - constructor: List, - - // 执行命令 - _command: function _command(value) { - var editor = this.editor; - var $textElem = editor.$textElem; - editor.selection.restoreSelection(); - if (editor.cmd.queryCommandState(value)) { - return; - } - editor.cmd.do(value); - - // 验证列表是否被包裹在

                之内 - var $selectionElem = editor.selection.getSelectionContainerElem(); - if ($selectionElem.getNodeName() === 'LI') { - $selectionElem = $selectionElem.parent(); - } - if (/^ol|ul$/i.test($selectionElem.getNodeName()) === false) { - return; - } - if ($selectionElem.equal($textElem)) { - // 证明是顶级标签,没有被

                包裹 - return; - } - var $parent = $selectionElem.parent(); - if ($parent.equal($textElem)) { - // $parent 是顶级标签,不能删除 - return; - } - - $selectionElem.insertAfter($parent); - $parent.remove(); - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - if (editor.cmd.queryCommandState('insertUnOrderedList') || editor.cmd.queryCommandState('insertOrderedList')) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); - } - } -}; - -/* - menu - justify -*/ -// 构造函数 -function Justify(editor) { - var _this = this; - - this.editor = editor; - this.$elem = $('

                '); - this.type = 'droplist'; - - // 当前是否 active 状态 - this._active = false; - - // 初始化 droplist - this.droplist = new DropList(this, { - width: 100, - $title: $('

                对齐方式

                '), - type: 'list', // droplist 以列表形式展示 - list: [{ $elem: $(' 靠左'), value: 'justifyLeft' }, { $elem: $(' 居中'), value: 'justifyCenter' }, { $elem: $(' 靠右'), value: 'justifyRight' }], - onClick: function onClick(value) { - // 注意 this 是指向当前的 List 对象 - _this._command(value); - } - }); -} - -// 原型 -Justify.prototype = { - constructor: Justify, - - // 执行命令 - _command: function _command(value) { - var editor = this.editor; - editor.cmd.do(value); - } -}; - -/* - menu - Forecolor -*/ -// 构造函数 -function ForeColor(editor) { - var _this = this; - - this.editor = editor; - this.$elem = $('
                '); - this.type = 'droplist'; - - // 获取配置的颜色 - var config = editor.config; - var colors = config.colors || []; - - // 当前是否 active 状态 - this._active = false; - - // 初始化 droplist - this.droplist = new DropList(this, { - width: 120, - $title: $('

                文字颜色

                '), - type: 'inline-block', // droplist 内容以 block 形式展示 - list: colors.map(function (color) { - return { $elem: $(''), value: color }; - }), - onClick: function onClick(value) { - // 注意 this 是指向当前的 ForeColor 对象 - _this._command(value); - } - }); -} - -// 原型 -ForeColor.prototype = { - constructor: ForeColor, - - // 执行命令 - _command: function _command(value) { - var editor = this.editor; - editor.cmd.do('foreColor', value); - } -}; - -/* - menu - BackColor -*/ -// 构造函数 -function BackColor(editor) { - var _this = this; - - this.editor = editor; - this.$elem = $('
                '); - this.type = 'droplist'; - - // 获取配置的颜色 - var config = editor.config; - var colors = config.colors || []; - - // 当前是否 active 状态 - this._active = false; - - // 初始化 droplist - this.droplist = new DropList(this, { - width: 120, - $title: $('

                背景色

                '), - type: 'inline-block', // droplist 内容以 block 形式展示 - list: colors.map(function (color) { - return { $elem: $(''), value: color }; - }), - onClick: function onClick(value) { - // 注意 this 是指向当前的 BackColor 对象 - _this._command(value); - } - }); -} - -// 原型 -BackColor.prototype = { - constructor: BackColor, - - // 执行命令 - _command: function _command(value) { - var editor = this.editor; - editor.cmd.do('backColor', value); - } -}; - -/* - menu - quote -*/ -// 构造函数 -function Quote(editor) { - this.editor = editor; - this.$elem = $('
                \n \n
                '); - this.type = 'click'; - - // 当前是否 active 状态 - this._active = false; -} - -// 原型 -Quote.prototype = { - constructor: Quote, - - onClick: function onClick(e) { - var editor = this.editor; - var $selectionElem = editor.selection.getSelectionContainerElem(); - var nodeName = $selectionElem.getNodeName(); - - if (!UA.isIE()) { - if (nodeName === 'BLOCKQUOTE') { - // 撤销 quote - editor.cmd.do('formatBlock', '

                '); - } else { - // 转换为 quote - editor.cmd.do('formatBlock', '

                '); - } - return; - } - - // IE 中不支持 formatBlock
                ,要用其他方式兼容 - var content = void 0, - $targetELem = void 0; - if (nodeName === 'P') { - // 将 P 转换为 quote - content = $selectionElem.text(); - $targetELem = $('
                ' + content + '
                '); - $targetELem.insertAfter($selectionElem); - $selectionElem.remove(); - return; - } - if (nodeName === 'BLOCKQUOTE') { - // 撤销 quote - content = $selectionElem.text(); - $targetELem = $('

                ' + content + '

                '); - $targetELem.insertAfter($selectionElem); - $selectionElem.remove(); - } - }, - - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - var reg = /^BLOCKQUOTE$/i; - var cmdValue = editor.cmd.queryCommandValue('formatBlock'); - if (reg.test(cmdValue)) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); - } - } -}; - -/* - menu - code -*/ -// 构造函数 -function Code(editor) { - this.editor = editor; - this.$elem = $('
                \n \n
                '); - this.type = 'panel'; - - // 当前是否 active 状态 - this._active = false; -} - -// 原型 -Code.prototype = { - constructor: Code, - - onClick: function onClick(e) { - var editor = this.editor; - var $startElem = editor.selection.getSelectionStartElem(); - var $endElem = editor.selection.getSelectionEndElem(); - var isSeleEmpty = editor.selection.isSelectionEmpty(); - var selectionText = editor.selection.getSelectionText(); - var $code = void 0; - - if (!$startElem.equal($endElem)) { - // 跨元素选择,不做处理 - editor.selection.restoreSelection(); - return; - } - if (!isSeleEmpty) { - // 选取不是空,用 包裹即可 - $code = $('' + selectionText + ''); - editor.cmd.do('insertElem', $code); - editor.selection.createRangeByElem($code, false); - editor.selection.restoreSelection(); - return; - } - - // 选取是空,且没有夸元素选择,则插入
                
                -        if (this._active) {
                -            // 选中状态,将编辑内容
                -            this._createPanel($startElem.html());
                -        } else {
                -            // 未选中状态,将创建内容
                -            this._createPanel();
                -        }
                -    },
                -
                -    _createPanel: function _createPanel(value) {
                -        var _this = this;
                -
                -        // value - 要编辑的内容
                -        value = value || '';
                -        var type = !value ? 'new' : 'edit';
                -        var textId = getRandom('texxt');
                -        var btnId = getRandom('btn');
                -
                -        var panel = new Panel(this, {
                -            width: 500,
                -            // 一个 Panel 包含多个 tab
                -            tabs: [{
                -                // 标题
                -                title: '插入代码',
                -                // 模板
                -                tpl: '
                \n \n
                \n \n
                \n
                ', - // 事件绑定 - events: [ - // 插入代码 - { - selector: '#' + btnId, - type: 'click', - fn: function fn() { - var $text = $('#' + textId); - var text = $text.val() || $text.html(); - text = replaceHtmlSymbol(text); - if (type === 'new') { - // 新插入 - _this._insertCode(text); - } else { - // 编辑更新 - _this._updateCode(text); - } - - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }] - } // first tab end - ] // tabs end - }); // new Panel end - - // 显示 panel - panel.show(); - - // 记录属性 - this.panel = panel; - }, - - // 插入代码 - _insertCode: function _insertCode(value) { - var editor = this.editor; - editor.cmd.do('insertHTML', '
                ' + value + '


                '); - }, - - // 更新代码 - _updateCode: function _updateCode(value) { - var editor = this.editor; - var $selectionELem = editor.selection.getSelectionContainerElem(); - if (!$selectionELem) { - return; - } - $selectionELem.html(value); - editor.selection.restoreSelection(); - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - var $selectionELem = editor.selection.getSelectionContainerElem(); - if (!$selectionELem) { - return; - } - var $parentElem = $selectionELem.parent(); - if ($selectionELem.getNodeName() === 'CODE' && $parentElem.getNodeName() === 'PRE') { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); - } - } -}; - -/* - menu - emoticon -*/ -// 构造函数 -function Emoticon(editor) { - this.editor = editor; - this.$elem = $('
                \n \n
                '); - this.type = 'panel'; - - // 当前是否 active 状态 - this._active = false; -} - -// 原型 -Emoticon.prototype = { - constructor: Emoticon, - - onClick: function onClick() { - this._createPanel(); - }, - - _createPanel: function _createPanel() { - var _this = this; - - var editor = this.editor; - var config = editor.config; - // 获取表情配置 - var emotions = config.emotions || []; - - // 创建表情 dropPanel 的配置 - var tabConfig = []; - emotions.forEach(function (emotData) { - var emotType = emotData.type; - var content = emotData.content || []; - - // 这一组表情最终拼接出来的 html - var faceHtml = ''; - - // emoji 表情 - if (emotType === 'emoji') { - content.forEach(function (item) { - if (item) { - faceHtml += '' + item + ''; - } - }); - } - // 图片表情 - if (emotType === 'image') { - content.forEach(function (item) { - var src = item.src; - var alt = item.alt; - if (src) { - // 加一个 data-w-e 属性,点击图片的时候不再提示编辑图片 - faceHtml += '' + alt + ''; - } - }); - } - - tabConfig.push({ - title: emotData.title, - tpl: '
                ' + faceHtml + '
                ', - events: [{ - selector: 'span.w-e-item', - type: 'click', - fn: function fn(e) { - var target = e.target; - var $target = $(target); - var nodeName = $target.getNodeName(); - - var insertHtml = void 0; - if (nodeName === 'IMG') { - // 插入图片 - insertHtml = $target.parent().html(); - } else { - // 插入 emoji - insertHtml = '' + $target.html() + ''; - } - - _this._insert(insertHtml); - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }] - }); - }); - - var panel = new Panel(this, { - width: 300, - height: 200, - // 一个 Panel 包含多个 tab - tabs: tabConfig - }); - - // 显示 panel - panel.show(); - - // 记录属性 - this.panel = panel; - }, - - // 插入表情 - _insert: function _insert(emotHtml) { - var editor = this.editor; - editor.cmd.do('insertHTML', emotHtml); - } -}; - -/* - menu - table -*/ -// 构造函数 -function Table(editor) { - this.editor = editor; - this.$elem = $('
                '); - this.type = 'panel'; - - // 当前是否 active 状态 - this._active = false; -} - -// 原型 -Table.prototype = { - constructor: Table, - - onClick: function onClick() { - if (this._active) { - // 编辑现有表格 - this._createEditPanel(); - } else { - // 插入新表格 - this._createInsertPanel(); - } - }, - - // 创建插入新表格的 panel - _createInsertPanel: function _createInsertPanel() { - var _this = this; - - // 用到的 id - var btnInsertId = getRandom('btn'); - var textRowNum = getRandom('row'); - var textColNum = getRandom('col'); - - var panel = new Panel(this, { - width: 250, - // panel 包含多个 tab - tabs: [{ - // 标题 - title: '插入表格', - // 模板 - tpl: '
                \n

                \n \u521B\u5EFA\n \n \u884C\n \n \u5217\u7684\u8868\u683C\n

                \n
                \n \n
                \n
                ', - // 事件绑定 - events: [{ - // 点击按钮,插入表格 - selector: '#' + btnInsertId, - type: 'click', - fn: function fn() { - var rowNum = parseInt($('#' + textRowNum).val()); - var colNum = parseInt($('#' + textColNum).val()); - - if (rowNum && colNum && rowNum > 0 && colNum > 0) { - // form 数据有效 - _this._insert(rowNum, colNum); - } - - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }] - } // first tab end - ] // tabs end - }); // panel end - - // 展示 panel - panel.show(); - - // 记录属性 - this.panel = panel; - }, - - // 插入表格 - _insert: function _insert(rowNum, colNum) { - // 拼接 table 模板 - var r = void 0, - c = void 0; - var html = ''; - for (r = 0; r < rowNum; r++) { - html += ''; - if (r === 0) { - for (c = 0; c < colNum; c++) { - html += ''; - } - } else { - for (c = 0; c < colNum; c++) { - html += ''; - } - } - html += ''; - } - html += '
                  


                '; - - // 执行命令 - var editor = this.editor; - editor.cmd.do('insertHTML', html); - - // 防止 firefox 下出现 resize 的控制点 - editor.cmd.do('enableObjectResizing', false); - editor.cmd.do('enableInlineTableEditing', false); - }, - - // 创建编辑表格的 panel - _createEditPanel: function _createEditPanel() { - var _this2 = this; - - // 可用的 id - var addRowBtnId = getRandom('add-row'); - var addColBtnId = getRandom('add-col'); - var delRowBtnId = getRandom('del-row'); - var delColBtnId = getRandom('del-col'); - var delTableBtnId = getRandom('del-table'); - - // 创建 panel 对象 - var panel = new Panel(this, { - width: 320, - // panel 包含多个 tab - tabs: [{ - // 标题 - title: '编辑表格', - // 模板 - tpl: '
                \n
                \n \n \n \n \n
                \n
                \n \n \n
                ', - // 事件绑定 - events: [{ - // 增加行 - selector: '#' + addRowBtnId, - type: 'click', - fn: function fn() { - _this2._addRow(); - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }, { - // 增加列 - selector: '#' + addColBtnId, - type: 'click', - fn: function fn() { - _this2._addCol(); - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }, { - // 删除行 - selector: '#' + delRowBtnId, - type: 'click', - fn: function fn() { - _this2._delRow(); - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }, { - // 删除列 - selector: '#' + delColBtnId, - type: 'click', - fn: function fn() { - _this2._delCol(); - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }, { - // 删除表格 - selector: '#' + delTableBtnId, - type: 'click', - fn: function fn() { - _this2._delTable(); - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }] - }] - }); - // 显示 panel - panel.show(); - }, - - // 获取选中的单元格的位置信息 - _getLocationData: function _getLocationData() { - var result = {}; - var editor = this.editor; - var $selectionELem = editor.selection.getSelectionContainerElem(); - if (!$selectionELem) { - return; - } - var nodeName = $selectionELem.getNodeName(); - if (nodeName !== 'TD' && nodeName !== 'TH') { - return; - } - - // 获取 td index - var $tr = $selectionELem.parent(); - var $tds = $tr.children(); - var tdLength = $tds.length; - $tds.forEach(function (td, index) { - if (td === $selectionELem[0]) { - // 记录并跳出循环 - result.td = { - index: index, - elem: td, - length: tdLength - }; - return false; - } - }); - - // 获取 tr index - var $tbody = $tr.parent(); - var $trs = $tbody.children(); - var trLength = $trs.length; - $trs.forEach(function (tr, index) { - if (tr === $tr[0]) { - // 记录并跳出循环 - result.tr = { - index: index, - elem: tr, - length: trLength - }; - return false; - } - }); - - // 返回结果 - return result; - }, - - // 增加行 - _addRow: function _addRow() { - // 获取当前单元格的位置信息 - var locationData = this._getLocationData(); - if (!locationData) { - return; - } - var trData = locationData.tr; - var $currentTr = $(trData.elem); - var tdData = locationData.td; - var tdLength = tdData.length; - - // 拼接即将插入的字符串 - var newTr = document.createElement('tr'); - var tpl = '', - i = void 0; - for (i = 0; i < tdLength; i++) { - tpl += ' '; - } - newTr.innerHTML = tpl; - // 插入 - $(newTr).insertAfter($currentTr); - }, - - // 增加列 - _addCol: function _addCol() { - // 获取当前单元格的位置信息 - var locationData = this._getLocationData(); - if (!locationData) { - return; - } - var trData = locationData.tr; - var tdData = locationData.td; - var tdIndex = tdData.index; - var $currentTr = $(trData.elem); - var $trParent = $currentTr.parent(); - var $trs = $trParent.children(); - - // 遍历所有行 - $trs.forEach(function (tr) { - var $tr = $(tr); - var $tds = $tr.children(); - var $currentTd = $tds.get(tdIndex); - var name = $currentTd.getNodeName().toLowerCase(); - - // new 一个 td,并插入 - var newTd = document.createElement(name); - $(newTd).insertAfter($currentTd); - }); - }, - - // 删除行 - _delRow: function _delRow() { - // 获取当前单元格的位置信息 - var locationData = this._getLocationData(); - if (!locationData) { - return; - } - var trData = locationData.tr; - var $currentTr = $(trData.elem); - $currentTr.remove(); - }, - - // 删除列 - _delCol: function _delCol() { - // 获取当前单元格的位置信息 - var locationData = this._getLocationData(); - if (!locationData) { - return; - } - var trData = locationData.tr; - var tdData = locationData.td; - var tdIndex = tdData.index; - var $currentTr = $(trData.elem); - var $trParent = $currentTr.parent(); - var $trs = $trParent.children(); - - // 遍历所有行 - $trs.forEach(function (tr) { - var $tr = $(tr); - var $tds = $tr.children(); - var $currentTd = $tds.get(tdIndex); - // 删除 - $currentTd.remove(); - }); - }, - - // 删除表格 - _delTable: function _delTable() { - var editor = this.editor; - var $selectionELem = editor.selection.getSelectionContainerElem(); - if (!$selectionELem) { - return; - } - var $table = $selectionELem.parentUntil('table'); - if (!$table) { - return; - } - $table.remove(); - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - var $selectionELem = editor.selection.getSelectionContainerElem(); - if (!$selectionELem) { - return; - } - var nodeName = $selectionELem.getNodeName(); - if (nodeName === 'TD' || nodeName === 'TH') { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); - } - } -}; - -/* - menu - video -*/ -// 构造函数 -function Video(editor) { - this.editor = editor; - this.$elem = $('
                '); - this.type = 'panel'; - - // 当前是否 active 状态 - this._active = false; -} - -// 原型 -Video.prototype = { - constructor: Video, - - onClick: function onClick() { - this._createPanel(); - }, - - _createPanel: function _createPanel() { - var _this = this; - - // 创建 id - var textValId = getRandom('text-val'); - var btnId = getRandom('btn'); - - // 创建 panel - var panel = new Panel(this, { - width: 350, - // 一个 panel 多个 tab - tabs: [{ - // 标题 - title: '插入视频', - // 模板 - tpl: '
                \n \n
                \n \n
                \n
                ', - // 事件绑定 - events: [{ - selector: '#' + btnId, - type: 'click', - fn: function fn() { - var $text = $('#' + textValId); - var val = $text.val().trim(); - - // 测试用视频地址 - // - - if (val) { - // 插入视频 - _this._insert(val); - } - - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }] - } // first tab end - ] // tabs end - }); // panel end - - // 显示 panel - panel.show(); - - // 记录属性 - this.panel = panel; - }, - - // 插入视频 - _insert: function _insert(val) { - var editor = this.editor; - editor.cmd.do('insertHTML', val + '


                '); - } -}; - -/* - menu - img -*/ -// 构造函数 -function Image(editor) { - this.editor = editor; - var imgMenuId = getRandom('w-e-img'); - this.$elem = $('
                '); - editor.imgMenuId = imgMenuId; - this.type = 'panel'; - - // 当前是否 active 状态 - this._active = false; -} - -// 原型 -Image.prototype = { - constructor: Image, - - onClick: function onClick() { - var editor = this.editor; - var config = editor.config; - if (config.qiniu) { - return; - } - if (this._active) { - this._createEditPanel(); - } else { - this._createInsertPanel(); - } - }, - - _createEditPanel: function _createEditPanel() { - var editor = this.editor; - - // id - var width30 = getRandom('width-30'); - var width50 = getRandom('width-50'); - var width100 = getRandom('width-100'); - var delBtn = getRandom('del-btn'); - - // tab 配置 - var tabsConfig = [{ - title: '编辑图片', - tpl: '
                \n
                \n \u6700\u5927\u5BBD\u5EA6\uFF1A\n \n \n \n
                \n
                \n \n \n
                ', - events: [{ - selector: '#' + width30, - type: 'click', - fn: function fn() { - var $img = editor._selectedImg; - if ($img) { - $img.css('max-width', '30%'); - } - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }, { - selector: '#' + width50, - type: 'click', - fn: function fn() { - var $img = editor._selectedImg; - if ($img) { - $img.css('max-width', '50%'); - } - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }, { - selector: '#' + width100, - type: 'click', - fn: function fn() { - var $img = editor._selectedImg; - if ($img) { - $img.css('max-width', '100%'); - } - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }, { - selector: '#' + delBtn, - type: 'click', - fn: function fn() { - var $img = editor._selectedImg; - if ($img) { - $img.remove(); - } - // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭 - return true; - } - }] - }]; - - // 创建 panel 并显示 - var panel = new Panel(this, { - width: 300, - tabs: tabsConfig - }); - panel.show(); - - // 记录属性 - this.panel = panel; - }, - - _createInsertPanel: function _createInsertPanel() { - var editor = this.editor; - var uploadImg = editor.uploadImg; - var config = editor.config; - - // id - var upTriggerId = getRandom('up-trigger'); - var upFileId = getRandom('up-file'); - var linkUrlId = getRandom('link-url'); - var linkBtnId = getRandom('link-btn'); - - // tabs 的配置 - var tabsConfig = [{ - title: '上传图片', - tpl: '
                \n
                \n \n
                \n
                \n \n
                \n
                ', - events: [{ - // 触发选择图片 - selector: '#' + upTriggerId, - type: 'click', - fn: function fn() { - var $file = $('#' + upFileId); - var fileElem = $file[0]; - if (fileElem) { - fileElem.click(); - } else { - // 返回 true 可关闭 panel - return true; - } - } - }, { - // 选择图片完毕 - selector: '#' + upFileId, - type: 'change', - fn: function fn() { - var $file = $('#' + upFileId); - var fileElem = $file[0]; - if (!fileElem) { - // 返回 true 可关闭 panel - return true; - } - - // 获取选中的 file 对象列表 - var fileList = fileElem.files; - if (fileList.length) { - uploadImg.uploadImg(fileList); - } - - // 返回 true 可关闭 panel - return true; - } - }] - }, // first tab end - { - title: '网络图片', - tpl: '
                \n \n
                \n \n
                \n
                ', - events: [{ - selector: '#' + linkBtnId, - type: 'click', - fn: function fn() { - var $linkUrl = $('#' + linkUrlId); - var url = $linkUrl.val().trim(); - - if (url) { - uploadImg.insertLinkImg(url); - } - - // 返回 true 表示函数执行结束之后关闭 panel - return true; - } - }] - } // second tab end - ]; // tabs end - - // 判断 tabs 的显示 - var tabsConfigResult = []; - if ((config.uploadImgShowBase64 || config.uploadImgServer || config.customUploadImg) && window.FileReader) { - // 显示“上传图片” - tabsConfigResult.push(tabsConfig[0]); - } - if (config.showLinkImg) { - // 显示“网络图片” - tabsConfigResult.push(tabsConfig[1]); - } - - // 创建 panel 并显示 - var panel = new Panel(this, { - width: 300, - tabs: tabsConfigResult - }); - panel.show(); - - // 记录属性 - this.panel = panel; - }, - - // 试图改变 active 状态 - tryChangeActive: function tryChangeActive(e) { - var editor = this.editor; - var $elem = this.$elem; - if (editor._selectedImg) { - this._active = true; - $elem.addClass('w-e-active'); - } else { - this._active = false; - $elem.removeClass('w-e-active'); - } - } -}; - -/* - 所有菜单的汇总 -*/ - -// 存储菜单的构造函数 -var MenuConstructors = {}; - -MenuConstructors.bold = Bold; - -MenuConstructors.head = Head; - -MenuConstructors.fontSize = FontSize; - -MenuConstructors.fontName = FontName; - -MenuConstructors.link = Link; - -MenuConstructors.italic = Italic; - -MenuConstructors.redo = Redo; - -MenuConstructors.strikeThrough = StrikeThrough; - -MenuConstructors.underline = Underline; - -MenuConstructors.undo = Undo; - -MenuConstructors.list = List; - -MenuConstructors.justify = Justify; - -MenuConstructors.foreColor = ForeColor; - -MenuConstructors.backColor = BackColor; - -MenuConstructors.quote = Quote; - -MenuConstructors.code = Code; - -MenuConstructors.emoticon = Emoticon; - -MenuConstructors.table = Table; - -MenuConstructors.video = Video; - -MenuConstructors.image = Image; - -/* - 菜单集合 -*/ -// 构造函数 -function Menus(editor) { - this.editor = editor; - this.menus = {}; -} - -// 修改原型 -Menus.prototype = { - constructor: Menus, - - // 初始化菜单 - init: function init() { - var _this = this; - - var editor = this.editor; - var config = editor.config || {}; - var configMenus = config.menus || []; // 获取配置中的菜单 - - // 根据配置信息,创建菜单 - configMenus.forEach(function (menuKey) { - var MenuConstructor = MenuConstructors[menuKey]; - if (MenuConstructor && typeof MenuConstructor === 'function') { - // 创建单个菜单 - _this.menus[menuKey] = new MenuConstructor(editor); - } - }); - - // 添加到菜单栏 - this._addToToolbar(); - - // 绑定事件 - this._bindEvent(); - }, - - // 添加到菜单栏 - _addToToolbar: function _addToToolbar() { - var editor = this.editor; - var $toolbarElem = editor.$toolbarElem; - var menus = this.menus; - var config = editor.config; - // config.zIndex 是配置的编辑区域的 z-index,菜单的 z-index 得在其基础上 +1 - var zIndex = config.zIndex + 1; - objForEach(menus, function (key, menu) { - var $elem = menu.$elem; - if ($elem) { - // 设置 z-index - $elem.css('z-index', zIndex); - $toolbarElem.append($elem); - } - }); - }, - - // 绑定菜单 click mouseenter 事件 - _bindEvent: function _bindEvent() { - var menus = this.menus; - var editor = this.editor; - objForEach(menus, function (key, menu) { - var type = menu.type; - if (!type) { - return; - } - var $elem = menu.$elem; - var droplist = menu.droplist; - var panel = menu.panel; - - // 点击类型,例如 bold - if (type === 'click' && menu.onClick) { - $elem.on('click', function (e) { - if (editor.selection.getRange() == null) { - return; - } - menu.onClick(e); - }); - } - - // 下拉框,例如 head - if (type === 'droplist' && droplist) { - $elem.on('mouseenter', function (e) { - if (editor.selection.getRange() == null) { - return; - } - // 显示 - droplist.showTimeoutId = setTimeout(function () { - droplist.show(); - }, 200); - }).on('mouseleave', function (e) { - // 隐藏 - droplist.hideTimeoutId = setTimeout(function () { - droplist.hide(); - }, 0); - }); - } - - // 弹框类型,例如 link - if (type === 'panel' && menu.onClick) { - $elem.on('click', function (e) { - e.stopPropagation(); - if (editor.selection.getRange() == null) { - return; - } - // 在自定义事件中显示 panel - menu.onClick(e); - }); - } - }); - }, - - // 尝试修改菜单状态 - changeActive: function changeActive() { - var menus = this.menus; - objForEach(menus, function (key, menu) { - if (menu.tryChangeActive) { - setTimeout(function () { - menu.tryChangeActive(); - }, 100); - } - }); - } -}; - -/* - 粘贴信息的处理 -*/ - -// 获取粘贴的纯文本 -function getPasteText(e) { - var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData; - var pasteText = void 0; - if (clipboardData == null) { - pasteText = window.clipboardData && window.clipboardData.getData('text'); - } else { - pasteText = clipboardData.getData('text/plain'); - } - - return replaceHtmlSymbol(pasteText); -} - -// 获取粘贴的html -function getPasteHtml(e, filterStyle, ignoreImg) { - var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData; - var pasteText = void 0, - pasteHtml = void 0; - if (clipboardData == null) { - pasteText = window.clipboardData && window.clipboardData.getData('text'); - } else { - pasteText = clipboardData.getData('text/plain'); - pasteHtml = clipboardData.getData('text/html'); - } - if (!pasteHtml && pasteText) { - pasteHtml = '

                ' + replaceHtmlSymbol(pasteText) + '

                '; - } - if (!pasteHtml) { - return; - } - - // 过滤word中状态过来的无用字符 - var docSplitHtml = pasteHtml.split(''); - if (docSplitHtml.length === 2) { - pasteHtml = docSplitHtml[0]; - } - - // 过滤无用标签 - pasteHtml = pasteHtml.replace(/<(meta|script|link).+?>/igm, ''); - // 去掉注释 - pasteHtml = pasteHtml.replace(//mg, ''); - // 过滤 data-xxx 属性 - pasteHtml = pasteHtml.replace(/\s?data-.+?=('|").+?('|")/igm, ''); - - if (ignoreImg) { - // 忽略图片 - pasteHtml = pasteHtml.replace(//igm, ''); - } - - if (filterStyle) { - // 过滤样式 - pasteHtml = pasteHtml.replace(/\s?(class|style)=('|").*?('|")/igm, ''); - } else { - // 保留样式 - pasteHtml = pasteHtml.replace(/\s?class=('|").*?('|")/igm, ''); - } - - return pasteHtml; -} - -// 获取粘贴的图片文件 -function getPasteImgs(e) { - var result = []; - var txt = getPasteText(e); - if (txt) { - // 有文字,就忽略图片 - return result; - } - - var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData || {}; - var items = clipboardData.items; - if (!items) { - return result; - } - - objForEach(items, function (key, value) { - var type = value.type; - if (/image/i.test(type)) { - result.push(value.getAsFile()); - } - }); - - return result; -} - -/* - 编辑区域 -*/ - -// 获取一个 elem.childNodes 的 JSON 数据 -function getChildrenJSON($elem) { - var result = []; - var $children = $elem.childNodes() || []; // 注意 childNodes() 可以获取文本节点 - $children.forEach(function (curElem) { - var elemResult = void 0; - var nodeType = curElem.nodeType; - - // 文本节点 - if (nodeType === 3) { - elemResult = curElem.textContent; - elemResult = replaceHtmlSymbol(elemResult); - } - - // 普通 DOM 节点 - if (nodeType === 1) { - elemResult = {}; - - // tag - elemResult.tag = curElem.nodeName.toLowerCase(); - // attr - var attrData = []; - var attrList = curElem.attributes || {}; - var attrListLength = attrList.length || 0; - for (var i = 0; i < attrListLength; i++) { - var attr = attrList[i]; - attrData.push({ - name: attr.name, - value: attr.value - }); - } - elemResult.attrs = attrData; - // children(递归) - elemResult.children = getChildrenJSON($(curElem)); - } - - result.push(elemResult); - }); - return result; -} - -// 构造函数 -function Text(editor) { - this.editor = editor; -} - -// 修改原型 -Text.prototype = { - constructor: Text, - - // 初始化 - init: function init() { - // 绑定事件 - this._bindEvent(); - }, - - // 清空内容 - clear: function clear() { - this.html('


                '); - }, - - // 获取 设置 html - html: function html(val) { - var editor = this.editor; - var $textElem = editor.$textElem; - var html = void 0; - if (val == null) { - html = $textElem.html(); - // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮,就得需要一个空的占位符 ​ ,这里替换掉 - html = html.replace(/\u200b/gm, ''); - return html; - } else { - $textElem.html(val); - - // 初始化选取,将光标定位到内容尾部 - editor.initSelection(); - } - }, - - // 获取 JSON - getJSON: function getJSON() { - var editor = this.editor; - var $textElem = editor.$textElem; - return getChildrenJSON($textElem); - }, - - // 获取 设置 text - text: function text(val) { - var editor = this.editor; - var $textElem = editor.$textElem; - var text = void 0; - if (val == null) { - text = $textElem.text(); - // 未选中任何内容的时候点击“加粗”或者“斜体”等按钮,就得需要一个空的占位符 ​ ,这里替换掉 - text = text.replace(/\u200b/gm, ''); - return text; - } else { - $textElem.text('

                ' + val + '

                '); - - // 初始化选取,将光标定位到内容尾部 - editor.initSelection(); - } - }, - - // 追加内容 - append: function append(html) { - var editor = this.editor; - var $textElem = editor.$textElem; - $textElem.append($(html)); - - // 初始化选取,将光标定位到内容尾部 - editor.initSelection(); - }, - - // 绑定事件 - _bindEvent: function _bindEvent() { - // 实时保存选取 - this._saveRangeRealTime(); - - // 按回车建时的特殊处理 - this._enterKeyHandle(); - - // 清空时保留


                - this._clearHandle(); - - // 粘贴事件(粘贴文字,粘贴图片) - this._pasteHandle(); - - // tab 特殊处理 - this._tabHandle(); - - // img 点击 - this._imgHandle(); - - // 拖拽事件 - this._dragHandle(); - }, - - // 实时保存选取 - _saveRangeRealTime: function _saveRangeRealTime() { - var editor = this.editor; - var $textElem = editor.$textElem; - - // 保存当前的选区 - function saveRange(e) { - // 随时保存选区 - editor.selection.saveRange(); - // 更新按钮 ative 状态 - editor.menus.changeActive(); - } - // 按键后保存 - $textElem.on('keyup', saveRange); - $textElem.on('mousedown', function (e) { - // mousedown 状态下,鼠标滑动到编辑区域外面,也需要保存选区 - $textElem.on('mouseleave', saveRange); - }); - $textElem.on('mouseup', function (e) { - saveRange(); - // 在编辑器区域之内完成点击,取消鼠标滑动到编辑区外面的事件 - $textElem.off('mouseleave', saveRange); - }); - }, - - // 按回车键时的特殊处理 - _enterKeyHandle: function _enterKeyHandle() { - var editor = this.editor; - var $textElem = editor.$textElem; - - function insertEmptyP($selectionElem) { - var $p = $('


                '); - $p.insertBefore($selectionElem); - editor.selection.createRangeByElem($p, true); - editor.selection.restoreSelection(); - $selectionElem.remove(); - } - - // 将回车之后生成的非

                的顶级标签,改为

                - function pHandle(e) { - var $selectionElem = editor.selection.getSelectionContainerElem(); - var $parentElem = $selectionElem.parent(); - - if ($parentElem.html() === '
                ') { - // 回车之前光标所在一个

                .....

                ,忽然回车生成一个空的


                - // 而且继续回车跳不出去,因此只能特殊处理 - insertEmptyP($selectionElem); - return; - } - - if (!$parentElem.equal($textElem)) { - // 不是顶级标签 - return; - } - - var nodeName = $selectionElem.getNodeName(); - if (nodeName === 'P') { - // 当前的标签是 P ,不用做处理 - return; - } - - if ($selectionElem.text()) { - // 有内容,不做处理 - return; - } - - // 插入

                ,并将选取定位到

                ,删除当前标签 - insertEmptyP($selectionElem); - } - - $textElem.on('keyup', function (e) { - if (e.keyCode !== 13) { - // 不是回车键 - return; - } - // 将回车之后生成的非

                的顶级标签,改为

                - pHandle(e); - }); - - //

                回车时 特殊处理 - function codeHandle(e) { - var $selectionElem = editor.selection.getSelectionContainerElem(); - if (!$selectionElem) { - return; - } - var $parentElem = $selectionElem.parent(); - var selectionNodeName = $selectionElem.getNodeName(); - var parentNodeName = $parentElem.getNodeName(); - - if (selectionNodeName !== 'CODE' || parentNodeName !== 'PRE') { - // 不符合要求 忽略 - return; - } - - if (!editor.cmd.queryCommandSupported('insertHTML')) { - // 必须原生支持 insertHTML 命令 - return; - } - - // 处理:光标定位到代码末尾,联系点击两次回车,即跳出代码块 - if (editor._willBreakCode === true) { - // 此时可以跳出代码块 - // 插入

                ,并将选取定位到

                - var $p = $('


                '); - $p.insertAfter($parentElem); - editor.selection.createRangeByElem($p, true); - editor.selection.restoreSelection(); - - // 修改状态 - editor._willBreakCode = false; - - e.preventDefault(); - return; - } - - var _startOffset = editor.selection.getRange().startOffset; - - // 处理:回车时,不能插入
                而是插入 \n ,因为是在 pre 标签里面 - editor.cmd.do('insertHTML', '\n'); - editor.selection.saveRange(); - if (editor.selection.getRange().startOffset === _startOffset) { - // 没起作用,再来一遍 - editor.cmd.do('insertHTML', '\n'); - } - - var codeLength = $selectionElem.html().length; - if (editor.selection.getRange().startOffset + 1 === codeLength) { - // 说明光标在代码最后的位置,执行了回车操作 - // 记录下来,以便下次回车时候跳出 code - editor._willBreakCode = true; - } - - // 阻止默认行为 - e.preventDefault(); - } - - $textElem.on('keydown', function (e) { - if (e.keyCode !== 13) { - // 不是回车键 - // 取消即将跳转代码块的记录 - editor._willBreakCode = false; - return; - } - //
                回车时 特殊处理 - codeHandle(e); - }); - }, - - // 清空时保留


                - _clearHandle: function _clearHandle() { - var editor = this.editor; - var $textElem = editor.$textElem; - - $textElem.on('keydown', function (e) { - if (e.keyCode !== 8) { - return; - } - var txtHtml = $textElem.html().toLowerCase().trim(); - if (txtHtml === '


                ') { - // 最后剩下一个空行,就不再删除了 - e.preventDefault(); - return; - } - }); - - $textElem.on('keyup', function (e) { - if (e.keyCode !== 8) { - return; - } - var $p = void 0; - var txtHtml = $textElem.html().toLowerCase().trim(); - - // firefox 时用 txtHtml === '
                ' 判断,其他用 !txtHtml 判断 - if (!txtHtml || txtHtml === '
                ') { - // 内容空了 - $p = $('


                '); - $textElem.html(''); // 一定要先清空,否则在 firefox 下有问题 - $textElem.append($p); - editor.selection.createRangeByElem($p, false, true); - editor.selection.restoreSelection(); - } - }); - }, - - // 粘贴事件(粘贴文字 粘贴图片) - _pasteHandle: function _pasteHandle() { - var editor = this.editor; - var config = editor.config; - var pasteFilterStyle = config.pasteFilterStyle; - var pasteTextHandle = config.pasteTextHandle; - var ignoreImg = config.pasteIgnoreImg; - var $textElem = editor.$textElem; - - // 粘贴图片、文本的事件,每次只能执行一个 - // 判断该次粘贴事件是否可以执行 - var pasteTime = 0; - function canDo() { - var now = Date.now(); - var flag = false; - if (now - pasteTime >= 100) { - // 间隔大于 100 ms ,可以执行 - flag = true; - } - pasteTime = now; - return flag; - } - function resetTime() { - pasteTime = 0; - } - - // 粘贴文字 - $textElem.on('paste', function (e) { - if (UA.isIE()) { - return; - } else { - // 阻止默认行为,使用 execCommand 的粘贴命令 - e.preventDefault(); - } - - // 粘贴图片和文本,只能同时使用一个 - if (!canDo()) { - return; - } - - // 获取粘贴的文字 - var pasteHtml = getPasteHtml(e, pasteFilterStyle, ignoreImg); - var pasteText = getPasteText(e); - pasteText = pasteText.replace(/\n/gm, '
                '); - - var $selectionElem = editor.selection.getSelectionContainerElem(); - if (!$selectionElem) { - return; - } - var nodeName = $selectionElem.getNodeName(); - - // code 中只能粘贴纯文本 - if (nodeName === 'CODE' || nodeName === 'PRE') { - if (pasteTextHandle && isFunction(pasteTextHandle)) { - // 用户自定义过滤处理粘贴内容 - pasteText = '' + (pasteTextHandle(pasteText) || ''); - } - editor.cmd.do('insertHTML', '

                ' + pasteText + '

                '); - return; - } - - // 先放开注释,有问题再追查 ———— - // // 表格中忽略,可能会出现异常问题 - // if (nodeName === 'TD' || nodeName === 'TH') { - // return - // } - - if (!pasteHtml) { - // 没有内容,可继续执行下面的图片粘贴 - resetTime(); - return; - } - try { - // firefox 中,获取的 pasteHtml 可能是没有
                  包裹的
                • - // 因此执行 insertHTML 会报错 - if (pasteTextHandle && isFunction(pasteTextHandle)) { - // 用户自定义过滤处理粘贴内容 - pasteHtml = '' + (pasteTextHandle(pasteHtml) || ''); - } - editor.cmd.do('insertHTML', pasteHtml); - } catch (ex) { - // 此时使用 pasteText 来兼容一下 - if (pasteTextHandle && isFunction(pasteTextHandle)) { - // 用户自定义过滤处理粘贴内容 - pasteText = '' + (pasteTextHandle(pasteText) || ''); - } - editor.cmd.do('insertHTML', '

                  ' + pasteText + '

                  '); - } - }); - - // 粘贴图片 - $textElem.on('paste', function (e) { - if (UA.isIE()) { - return; - } else { - e.preventDefault(); - } - - // 粘贴图片和文本,只能同时使用一个 - if (!canDo()) { - return; - } - - // 获取粘贴的图片 - var pasteFiles = getPasteImgs(e); - if (!pasteFiles || !pasteFiles.length) { - return; - } - - // 获取当前的元素 - var $selectionElem = editor.selection.getSelectionContainerElem(); - if (!$selectionElem) { - return; - } - var nodeName = $selectionElem.getNodeName(); - - // code 中粘贴忽略 - if (nodeName === 'CODE' || nodeName === 'PRE') { - return; - } - - // 上传图片 - var uploadImg = editor.uploadImg; - uploadImg.uploadImg(pasteFiles); - }); - }, - - // tab 特殊处理 - _tabHandle: function _tabHandle() { - var editor = this.editor; - var $textElem = editor.$textElem; - - $textElem.on('keydown', function (e) { - if (e.keyCode !== 9) { - return; - } - if (!editor.cmd.queryCommandSupported('insertHTML')) { - // 必须原生支持 insertHTML 命令 - return; - } - var $selectionElem = editor.selection.getSelectionContainerElem(); - if (!$selectionElem) { - return; - } - var $parentElem = $selectionElem.parent(); - var selectionNodeName = $selectionElem.getNodeName(); - var parentNodeName = $parentElem.getNodeName(); - - if (selectionNodeName === 'CODE' && parentNodeName === 'PRE') { - //
                   里面
                  -                editor.cmd.do('insertHTML', '    ');
                  -            } else {
                  -                // 普通文字
                  -                editor.cmd.do('insertHTML', '    ');
                  -            }
                  -
                  -            e.preventDefault();
                  -        });
                  -    },
                  -
                  -    // img 点击
                  -    _imgHandle: function _imgHandle() {
                  -        var editor = this.editor;
                  -        var $textElem = editor.$textElem;
                  -
                  -        // 为图片增加 selected 样式
                  -        $textElem.on('click', 'img', function (e) {
                  -            var img = this;
                  -            var $img = $(img);
                  -
                  -            if ($img.attr('data-w-e') === '1') {
                  -                // 是表情图片,忽略
                  -                return;
                  -            }
                  -
                  -            // 记录当前点击过的图片
                  -            editor._selectedImg = $img;
                  -
                  -            // 修改选区并 restore ,防止用户此时点击退格键,会删除其他内容
                  -            editor.selection.createRangeByElem($img);
                  -            editor.selection.restoreSelection();
                  -        });
                  -
                  -        // 去掉图片的 selected 样式
                  -        $textElem.on('click  keyup', function (e) {
                  -            if (e.target.matches('img')) {
                  -                // 点击的是图片,忽略
                  -                return;
                  -            }
                  -            // 删除记录
                  -            editor._selectedImg = null;
                  -        });
                  -    },
                  -
                  -    // 拖拽事件
                  -    _dragHandle: function _dragHandle() {
                  -        var editor = this.editor;
                  -
                  -        // 禁用 document 拖拽事件
                  -        var $document = $(document);
                  -        $document.on('dragleave drop dragenter dragover', function (e) {
                  -            e.preventDefault();
                  -        });
                  -
                  -        // 添加编辑区域拖拽事件
                  -        var $textElem = editor.$textElem;
                  -        $textElem.on('drop', function (e) {
                  -            e.preventDefault();
                  -            var files = e.dataTransfer && e.dataTransfer.files;
                  -            if (!files || !files.length) {
                  -                return;
                  -            }
                  -
                  -            // 上传图片
                  -            var uploadImg = editor.uploadImg;
                  -            uploadImg.uploadImg(files);
                  -        });
                  -    }
                  -};
                  -
                  -/*
                  -    命令,封装 document.execCommand
                  -*/
                  -
                  -// 构造函数
                  -function Command(editor) {
                  -    this.editor = editor;
                  -}
                  -
                  -// 修改原型
                  -Command.prototype = {
                  -    constructor: Command,
                  -
                  -    // 执行命令
                  -    do: function _do(name, value) {
                  -        var editor = this.editor;
                  -
                  -        // 使用 styleWithCSS
                  -        if (!editor._useStyleWithCSS) {
                  -            document.execCommand('styleWithCSS', null, true);
                  -            editor._useStyleWithCSS = true;
                  -        }
                  -
                  -        // 如果无选区,忽略
                  -        if (!editor.selection.getRange()) {
                  -            return;
                  -        }
                  -
                  -        // 恢复选取
                  -        editor.selection.restoreSelection();
                  -
                  -        // 执行
                  -        var _name = '_' + name;
                  -        if (this[_name]) {
                  -            // 有自定义事件
                  -            this[_name](value);
                  -        } else {
                  -            // 默认 command
                  -            this._execCommand(name, value);
                  -        }
                  -
                  -        // 修改菜单状态
                  -        editor.menus.changeActive();
                  -
                  -        // 最后,恢复选取保证光标在原来的位置闪烁
                  -        editor.selection.saveRange();
                  -        editor.selection.restoreSelection();
                  -
                  -        // 触发 onchange
                  -        editor.change && editor.change();
                  -    },
                  -
                  -    // 自定义 insertHTML 事件
                  -    _insertHTML: function _insertHTML(html) {
                  -        var editor = this.editor;
                  -        var range = editor.selection.getRange();
                  -
                  -        if (this.queryCommandSupported('insertHTML')) {
                  -            // W3C
                  -            this._execCommand('insertHTML', html);
                  -        } else if (range.insertNode) {
                  -            // IE
                  -            range.deleteContents();
                  -            range.insertNode($(html)[0]);
                  -        } else if (range.pasteHTML) {
                  -            // IE <= 10
                  -            range.pasteHTML(html);
                  -        }
                  -    },
                  -
                  -    // 插入 elem
                  -    _insertElem: function _insertElem($elem) {
                  -        var editor = this.editor;
                  -        var range = editor.selection.getRange();
                  -
                  -        if (range.insertNode) {
                  -            range.deleteContents();
                  -            range.insertNode($elem[0]);
                  -        }
                  -    },
                  -
                  -    // 封装 execCommand
                  -    _execCommand: function _execCommand(name, value) {
                  -        document.execCommand(name, false, value);
                  -    },
                  -
                  -    // 封装 document.queryCommandValue
                  -    queryCommandValue: function queryCommandValue(name) {
                  -        return document.queryCommandValue(name);
                  -    },
                  -
                  -    // 封装 document.queryCommandState
                  -    queryCommandState: function queryCommandState(name) {
                  -        return document.queryCommandState(name);
                  -    },
                  -
                  -    // 封装 document.queryCommandSupported
                  -    queryCommandSupported: function queryCommandSupported(name) {
                  -        return document.queryCommandSupported(name);
                  -    }
                  -};
                  -
                  -/*
                  -    selection range API
                  -*/
                  -
                  -// 构造函数
                  -function API(editor) {
                  -    this.editor = editor;
                  -    this._currentRange = null;
                  -}
                  -
                  -// 修改原型
                  -API.prototype = {
                  -    constructor: API,
                  -
                  -    // 获取 range 对象
                  -    getRange: function getRange() {
                  -        return this._currentRange;
                  -    },
                  -
                  -    // 保存选区
                  -    saveRange: function saveRange(_range) {
                  -        if (_range) {
                  -            // 保存已有选区
                  -            this._currentRange = _range;
                  -            return;
                  -        }
                  -
                  -        // 获取当前的选区
                  -        var selection = window.getSelection();
                  -        if (selection.rangeCount === 0) {
                  -            return;
                  -        }
                  -        var range = selection.getRangeAt(0);
                  -
                  -        // 判断选区内容是否在编辑内容之内
                  -        var $containerElem = this.getSelectionContainerElem(range);
                  -        if (!$containerElem) {
                  -            return;
                  -        }
                  -
                  -        // 判断选区内容是否在不可编辑区域之内
                  -        if ($containerElem.attr('contenteditable') === 'false' || $containerElem.parentUntil('[contenteditable=false]')) {
                  -            return;
                  -        }
                  -
                  -        var editor = this.editor;
                  -        var $textElem = editor.$textElem;
                  -        if ($textElem.isContain($containerElem)) {
                  -            // 是编辑内容之内的
                  -            this._currentRange = range;
                  -        }
                  -    },
                  -
                  -    // 折叠选区
                  -    collapseRange: function collapseRange(toStart) {
                  -        if (toStart == null) {
                  -            // 默认为 false
                  -            toStart = false;
                  -        }
                  -        var range = this._currentRange;
                  -        if (range) {
                  -            range.collapse(toStart);
                  -        }
                  -    },
                  -
                  -    // 选中区域的文字
                  -    getSelectionText: function getSelectionText() {
                  -        var range = this._currentRange;
                  -        if (range) {
                  -            return this._currentRange.toString();
                  -        } else {
                  -            return '';
                  -        }
                  -    },
                  -
                  -    // 选区的 $Elem
                  -    getSelectionContainerElem: function getSelectionContainerElem(range) {
                  -        range = range || this._currentRange;
                  -        var elem = void 0;
                  -        if (range) {
                  -            elem = range.commonAncestorContainer;
                  -            return $(elem.nodeType === 1 ? elem : elem.parentNode);
                  -        }
                  -    },
                  -    getSelectionStartElem: function getSelectionStartElem(range) {
                  -        range = range || this._currentRange;
                  -        var elem = void 0;
                  -        if (range) {
                  -            elem = range.startContainer;
                  -            return $(elem.nodeType === 1 ? elem : elem.parentNode);
                  -        }
                  -    },
                  -    getSelectionEndElem: function getSelectionEndElem(range) {
                  -        range = range || this._currentRange;
                  -        var elem = void 0;
                  -        if (range) {
                  -            elem = range.endContainer;
                  -            return $(elem.nodeType === 1 ? elem : elem.parentNode);
                  -        }
                  -    },
                  -
                  -    // 选区是否为空
                  -    isSelectionEmpty: function isSelectionEmpty() {
                  -        var range = this._currentRange;
                  -        if (range && range.startContainer) {
                  -            if (range.startContainer === range.endContainer) {
                  -                if (range.startOffset === range.endOffset) {
                  -                    return true;
                  -                }
                  -            }
                  -        }
                  -        return false;
                  -    },
                  -
                  -    // 恢复选区
                  -    restoreSelection: function restoreSelection() {
                  -        var selection = window.getSelection();
                  -        selection.removeAllRanges();
                  -        selection.addRange(this._currentRange);
                  -    },
                  -
                  -    // 创建一个空白(即 ​ 字符)选区
                  -    createEmptyRange: function createEmptyRange() {
                  -        var editor = this.editor;
                  -        var range = this.getRange();
                  -        var $elem = void 0;
                  -
                  -        if (!range) {
                  -            // 当前无 range
                  -            return;
                  -        }
                  -        if (!this.isSelectionEmpty()) {
                  -            // 当前选区必须没有内容才可以
                  -            return;
                  -        }
                  -
                  -        try {
                  -            // 目前只支持 webkit 内核
                  -            if (UA.isWebkit()) {
                  -                // 插入 ​
                  -                editor.cmd.do('insertHTML', '​');
                  -                // 修改 offset 位置
                  -                range.setEnd(range.endContainer, range.endOffset + 1);
                  -                // 存储
                  -                this.saveRange(range);
                  -            } else {
                  -                $elem = $('');
                  -                editor.cmd.do('insertElem', $elem);
                  -                this.createRangeByElem($elem, true);
                  -            }
                  -        } catch (ex) {
                  -            // 部分情况下会报错,兼容一下
                  -        }
                  -    },
                  -
                  -    // 根据 $Elem 设置选区
                  -    createRangeByElem: function createRangeByElem($elem, toStart, isContent) {
                  -        // $elem - 经过封装的 elem
                  -        // toStart - true 开始位置,false 结束位置
                  -        // isContent - 是否选中Elem的内容
                  -        if (!$elem.length) {
                  -            return;
                  -        }
                  -
                  -        var elem = $elem[0];
                  -        var range = document.createRange();
                  -
                  -        if (isContent) {
                  -            range.selectNodeContents(elem);
                  -        } else {
                  -            range.selectNode(elem);
                  -        }
                  -
                  -        if (typeof toStart === 'boolean') {
                  -            range.collapse(toStart);
                  -        }
                  -
                  -        // 存储 range
                  -        this.saveRange(range);
                  -    }
                  -};
                  -
                  -/*
                  -    上传进度条
                  -*/
                  -
                  -function Progress(editor) {
                  -    this.editor = editor;
                  -    this._time = 0;
                  -    this._isShow = false;
                  -    this._isRender = false;
                  -    this._timeoutId = 0;
                  -    this.$textContainer = editor.$textContainerElem;
                  -    this.$bar = $('
                  '); -} - -Progress.prototype = { - constructor: Progress, - - show: function show(progress) { - var _this = this; - - // 状态处理 - if (this._isShow) { - return; - } - this._isShow = true; - - // 渲染 - var $bar = this.$bar; - if (!this._isRender) { - var $textContainer = this.$textContainer; - $textContainer.append($bar); - } else { - this._isRender = true; - } - - // 改变进度(节流,100ms 渲染一次) - if (Date.now() - this._time > 100) { - if (progress <= 1) { - $bar.css('width', progress * 100 + '%'); - this._time = Date.now(); - } - } - - // 隐藏 - var timeoutId = this._timeoutId; - if (timeoutId) { - clearTimeout(timeoutId); - } - timeoutId = setTimeout(function () { - _this._hide(); - }, 500); - }, - - _hide: function _hide() { - var $bar = this.$bar; - $bar.remove(); - - // 修改状态 - this._time = 0; - this._isShow = false; - this._isRender = false; - } -}; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { - return typeof obj; -} : function (obj) { - return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; -}; - -/* - 上传图片 -*/ - -// 构造函数 -function UploadImg(editor) { - this.editor = editor; -} - -// 原型 -UploadImg.prototype = { - constructor: UploadImg, - - // 根据 debug 弹出不同的信息 - _alert: function _alert(alertInfo, debugInfo) { - var editor = this.editor; - var debug = editor.config.debug; - var customAlert = editor.config.customAlert; - - if (debug) { - throw new Error('wangEditor: ' + (debugInfo || alertInfo)); - } else { - if (customAlert && typeof customAlert === 'function') { - customAlert(alertInfo); - } else { - alert(alertInfo); - } - } - }, - - // 根据链接插入图片 - insertLinkImg: function insertLinkImg(link) { - var _this2 = this; - - if (!link) { - return; - } - var editor = this.editor; - var config = editor.config; - - // 校验格式 - var linkImgCheck = config.linkImgCheck; - var checkResult = void 0; - if (linkImgCheck && typeof linkImgCheck === 'function') { - checkResult = linkImgCheck(link); - if (typeof checkResult === 'string') { - // 校验失败,提示信息 - alert(checkResult); - return; - } - } - - editor.cmd.do('insertHTML', ''); - - // 验证图片 url 是否有效,无效的话给出提示 - var img = document.createElement('img'); - img.onload = function () { - var callback = config.linkImgCallback; - if (callback && typeof callback === 'function') { - callback(link); - } - - img = null; - }; - img.onerror = function () { - img = null; - // 无法成功下载图片 - _this2._alert('插入图片错误', 'wangEditor: \u63D2\u5165\u56FE\u7247\u51FA\u9519\uFF0C\u56FE\u7247\u94FE\u63A5\u662F "' + link + '"\uFF0C\u4E0B\u8F7D\u8BE5\u94FE\u63A5\u5931\u8D25'); - return; - }; - img.onabort = function () { - img = null; - }; - img.src = link; - }, - - // 上传图片 - uploadImg: function uploadImg(files) { - var _this3 = this; - - if (!files || !files.length) { - return; - } - - // ------------------------------ 获取配置信息 ------------------------------ - var editor = this.editor; - var config = editor.config; - var uploadImgServer = config.uploadImgServer; - var uploadImgShowBase64 = config.uploadImgShowBase64; - - var maxSize = config.uploadImgMaxSize; - var maxSizeM = maxSize / 1024 / 1024; - var maxLength = config.uploadImgMaxLength || 10000; - var uploadFileName = config.uploadFileName || ''; - var uploadImgParams = config.uploadImgParams || {}; - var uploadImgParamsWithUrl = config.uploadImgParamsWithUrl; - var uploadImgHeaders = config.uploadImgHeaders || {}; - var hooks = config.uploadImgHooks || {}; - var timeout = config.uploadImgTimeout || 3000; - var withCredentials = config.withCredentials; - if (withCredentials == null) { - withCredentials = false; - } - var customUploadImg = config.customUploadImg; - - if (!customUploadImg) { - // 没有 customUploadImg 的情况下,需要如下两个配置才能继续进行图片上传 - if (!uploadImgServer && !uploadImgShowBase64) { - return; - } - } - - // ------------------------------ 验证文件信息 ------------------------------ - var resultFiles = []; - var errInfo = []; - arrForEach(files, function (file) { - var name = file.name; - var size = file.size; - - // chrome 低版本 name === undefined - if (!name || !size) { - return; - } - - if (/\.(jpg|jpeg|png|bmp|gif|webp)$/i.test(name) === false) { - // 后缀名不合法,不是图片 - errInfo.push('\u3010' + name + '\u3011\u4E0D\u662F\u56FE\u7247'); - return; - } - if (maxSize < size) { - // 上传图片过大 - errInfo.push('\u3010' + name + '\u3011\u5927\u4E8E ' + maxSizeM + 'M'); - return; - } - - // 验证通过的加入结果列表 - resultFiles.push(file); - }); - // 抛出验证信息 - if (errInfo.length) { - this._alert('图片验证未通过: \n' + errInfo.join('\n')); - return; - } - if (resultFiles.length > maxLength) { - this._alert('一次最多上传' + maxLength + '张图片'); - return; - } - - // ------------------------------ 自定义上传 ------------------------------ - if (customUploadImg && typeof customUploadImg === 'function') { - customUploadImg(resultFiles, this.insertLinkImg.bind(this)); - - // 阻止以下代码执行 - return; - } - - // 添加图片数据 - var formdata = new FormData(); - arrForEach(resultFiles, function (file) { - var name = uploadFileName || file.name; - formdata.append(name, file); - }); - - // ------------------------------ 上传图片 ------------------------------ - if (uploadImgServer && typeof uploadImgServer === 'string') { - // 添加参数 - var uploadImgServerArr = uploadImgServer.split('#'); - uploadImgServer = uploadImgServerArr[0]; - var uploadImgServerHash = uploadImgServerArr[1] || ''; - objForEach(uploadImgParams, function (key, val) { - // 因使用者反应,自定义参数不能默认 encode ,由 v3.1.1 版本开始注释掉 - // val = encodeURIComponent(val) - - // 第一,将参数拼接到 url 中 - if (uploadImgParamsWithUrl) { - if (uploadImgServer.indexOf('?') > 0) { - uploadImgServer += '&'; - } else { - uploadImgServer += '?'; - } - uploadImgServer = uploadImgServer + key + '=' + val; - } - - // 第二,将参数添加到 formdata 中 - formdata.append(key, val); - }); - if (uploadImgServerHash) { - uploadImgServer += '#' + uploadImgServerHash; - } - - // 定义 xhr - var xhr = new XMLHttpRequest(); - xhr.open('POST', uploadImgServer); - - // 设置超时 - xhr.timeout = timeout; - xhr.ontimeout = function () { - // hook - timeout - if (hooks.timeout && typeof hooks.timeout === 'function') { - hooks.timeout(xhr, editor); - } - - _this3._alert('上传图片超时'); - }; - - // 监控 progress - if (xhr.upload) { - xhr.upload.onprogress = function (e) { - var percent = void 0; - // 进度条 - var progressBar = new Progress(editor); - if (e.lengthComputable) { - percent = e.loaded / e.total; - progressBar.show(percent); - } - }; - } - - // 返回数据 - xhr.onreadystatechange = function () { - var result = void 0; - if (xhr.readyState === 4) { - if (xhr.status < 200 || xhr.status >= 300) { - // hook - error - if (hooks.error && typeof hooks.error === 'function') { - hooks.error(xhr, editor); - } - - // xhr 返回状态错误 - _this3._alert('上传图片发生错误', '\u4E0A\u4F20\u56FE\u7247\u53D1\u751F\u9519\u8BEF\uFF0C\u670D\u52A1\u5668\u8FD4\u56DE\u72B6\u6001\u662F ' + xhr.status); - return; - } - - result = xhr.responseText; - if ((typeof result === 'undefined' ? 'undefined' : _typeof(result)) !== 'object') { - try { - result = JSON.parse(result); - } catch (ex) { - // hook - fail - if (hooks.fail && typeof hooks.fail === 'function') { - hooks.fail(xhr, editor, result); - } - - _this3._alert('上传图片失败', '上传图片返回结果错误,返回结果是: ' + result); - return; - } - } - if (!hooks.customInsert && result.errno != '0') { - // hook - fail - if (hooks.fail && typeof hooks.fail === 'function') { - hooks.fail(xhr, editor, result); - } - - // 数据错误 - _this3._alert('上传图片失败', '上传图片返回结果错误,返回结果 errno=' + result.errno); - } else { - if (hooks.customInsert && typeof hooks.customInsert === 'function') { - // 使用者自定义插入方法 - hooks.customInsert(_this3.insertLinkImg.bind(_this3), result, editor); - } else { - // 将图片插入编辑器 - var data = result.data || []; - data.forEach(function (link) { - _this3.insertLinkImg(link); - }); - } - - // hook - success - if (hooks.success && typeof hooks.success === 'function') { - hooks.success(xhr, editor, result); - } - } - } - }; - - // hook - before - if (hooks.before && typeof hooks.before === 'function') { - var beforeResult = hooks.before(xhr, editor, resultFiles); - if (beforeResult && (typeof beforeResult === 'undefined' ? 'undefined' : _typeof(beforeResult)) === 'object') { - if (beforeResult.prevent) { - // 如果返回的结果是 {prevent: true, msg: 'xxxx'} 则表示用户放弃上传 - this._alert(beforeResult.msg); - return; - } - } - } - - // 自定义 headers - objForEach(uploadImgHeaders, function (key, val) { - xhr.setRequestHeader(key, val); - }); - - // 跨域传 cookie - xhr.withCredentials = withCredentials; - - // 发送请求 - xhr.send(formdata); - - // 注意,要 return 。不去操作接下来的 base64 显示方式 - return; - } - - // ------------------------------ 显示 base64 格式 ------------------------------ - if (uploadImgShowBase64) { - arrForEach(files, function (file) { - var _this = _this3; - var reader = new FileReader(); - reader.readAsDataURL(file); - reader.onload = function () { - _this.insertLinkImg(this.result); - }; - }); - } - } -}; - -/* - 编辑器构造函数 -*/ - -// id,累加 -var editorId = 1; - -// 构造函数 -function Editor(toolbarSelector, textSelector) { - if (toolbarSelector == null) { - // 没有传入任何参数,报错 - throw new Error('错误:初始化编辑器时候未传入任何参数,请查阅文档'); - } - // id,用以区分单个页面不同的编辑器对象 - this.id = 'wangEditor-' + editorId++; - - this.toolbarSelector = toolbarSelector; - this.textSelector = textSelector; - - // 自定义配置 - this.customConfig = {}; -} - -// 修改原型 -Editor.prototype = { - constructor: Editor, - - // 初始化配置 - _initConfig: function _initConfig() { - // _config 是默认配置,this.customConfig 是用户自定义配置,将它们 merge 之后再赋值 - var target = {}; - this.config = Object.assign(target, config, this.customConfig); - - // 将语言配置,生成正则表达式 - var langConfig = this.config.lang || {}; - var langArgs = []; - objForEach(langConfig, function (key, val) { - // key 即需要生成正则表达式的规则,如“插入链接” - // val 即需要被替换成的语言,如“insert link” - langArgs.push({ - reg: new RegExp(key, 'img'), - val: val - - }); - }); - this.config.langArgs = langArgs; - }, - - // 初始化 DOM - _initDom: function _initDom() { - var _this = this; - - var toolbarSelector = this.toolbarSelector; - var $toolbarSelector = $(toolbarSelector); - var textSelector = this.textSelector; - - var config$$1 = this.config; - var zIndex = config$$1.zIndex; - - // 定义变量 - var $toolbarElem = void 0, - $textContainerElem = void 0, - $textElem = void 0, - $children = void 0; - - if (textSelector == null) { - // 只传入一个参数,即是容器的选择器或元素,toolbar 和 text 的元素自行创建 - $toolbarElem = $('
                  '); - $textContainerElem = $('
                  '); - - // 将编辑器区域原有的内容,暂存起来 - $children = $toolbarSelector.children(); - - // 添加到 DOM 结构中 - $toolbarSelector.append($toolbarElem).append($textContainerElem); - - // 自行创建的,需要配置默认的样式 - $toolbarElem.css('background-color', '#f1f1f1').css('border', '1px solid #ccc'); - $textContainerElem.css('border', '1px solid #ccc').css('border-top', 'none').css('height', '300px'); - } else { - // toolbar 和 text 的选择器都有值,记录属性 - $toolbarElem = $toolbarSelector; - $textContainerElem = $(textSelector); - // 将编辑器区域原有的内容,暂存起来 - $children = $textContainerElem.children(); - } - - // 编辑区域 - $textElem = $('
                  '); - $textElem.attr('contenteditable', 'true').css('width', '100%').css('height', '100%'); - - // 初始化编辑区域内容 - if ($children && $children.length) { - $textElem.append($children); - } else { - $textElem.append($('


                  ')); - } - - // 编辑区域加入DOM - $textContainerElem.append($textElem); - - // 设置通用的 class - $toolbarElem.addClass('w-e-toolbar'); - $textContainerElem.addClass('w-e-text-container'); - $textContainerElem.css('z-index', zIndex); - $textElem.addClass('w-e-text'); - - // 添加 ID - var toolbarElemId = getRandom('toolbar-elem'); - $toolbarElem.attr('id', toolbarElemId); - var textElemId = getRandom('text-elem'); - $textElem.attr('id', textElemId); - - // 记录属性 - this.$toolbarElem = $toolbarElem; - this.$textContainerElem = $textContainerElem; - this.$textElem = $textElem; - this.toolbarElemId = toolbarElemId; - this.textElemId = textElemId; - - // 记录输入法的开始和结束 - var compositionEnd = true; - $textContainerElem.on('compositionstart', function () { - // 输入法开始输入 - compositionEnd = false; - }); - $textContainerElem.on('compositionend', function () { - // 输入法结束输入 - compositionEnd = true; - }); - - // 绑定 onchange - $textContainerElem.on('click keyup', function () { - // 输入法结束才出发 onchange - compositionEnd && _this.change && _this.change(); - }); - $toolbarElem.on('click', function () { - this.change && this.change(); - }); - - //绑定 onfocus 与 onblur 事件 - if (config$$1.onfocus || config$$1.onblur) { - // 当前编辑器是否是焦点状态 - this.isFocus = false; - - $(document).on('click', function (e) { - //判断当前点击元素是否在编辑器内 - var isChild = $textElem.isContain($(e.target)); - - //判断当前点击元素是否为工具栏 - var isToolbar = $toolbarElem.isContain($(e.target)); - var isMenu = $toolbarElem[0] == e.target ? true : false; - - if (!isChild) { - //若为选择工具栏中的功能,则不视为成blur操作 - if (isToolbar && !isMenu) { - return; - } - - if (_this.isFocus) { - _this.onblur && _this.onblur(); - } - _this.isFocus = false; - } else { - if (!_this.isFocus) { - _this.onfocus && _this.onfocus(); - } - _this.isFocus = true; - } - }); - } - }, - - // 封装 command - _initCommand: function _initCommand() { - this.cmd = new Command(this); - }, - - // 封装 selection range API - _initSelectionAPI: function _initSelectionAPI() { - this.selection = new API(this); - }, - - // 添加图片上传 - _initUploadImg: function _initUploadImg() { - this.uploadImg = new UploadImg(this); - }, - - // 初始化菜单 - _initMenus: function _initMenus() { - this.menus = new Menus(this); - this.menus.init(); - }, - - // 添加 text 区域 - _initText: function _initText() { - this.txt = new Text(this); - this.txt.init(); - }, - - // 初始化选区,将光标定位到内容尾部 - initSelection: function initSelection(newLine) { - var $textElem = this.$textElem; - var $children = $textElem.children(); - if (!$children.length) { - // 如果编辑器区域无内容,添加一个空行,重新设置选区 - $textElem.append($('


                  ')); - this.initSelection(); - return; - } - - var $last = $children.last(); - - if (newLine) { - // 新增一个空行 - var html = $last.html().toLowerCase(); - var nodeName = $last.getNodeName(); - if (html !== '
                  ' && html !== '' || nodeName !== 'P') { - // 最后一个元素不是


                  ,添加一个空行,重新设置选区 - $textElem.append($('


                  ')); - this.initSelection(); - return; - } - } - - this.selection.createRangeByElem($last, false, true); - this.selection.restoreSelection(); - }, - - // 绑定事件 - _bindEvent: function _bindEvent() { - // -------- 绑定 onchange 事件 -------- - var onChangeTimeoutId = 0; - var beforeChangeHtml = this.txt.html(); - var config$$1 = this.config; - - // onchange 触发延迟时间 - var onchangeTimeout = config$$1.onchangeTimeout; - onchangeTimeout = parseInt(onchangeTimeout, 10); - if (!onchangeTimeout || onchangeTimeout <= 0) { - onchangeTimeout = 200; - } - - var onchange = config$$1.onchange; - if (onchange && typeof onchange === 'function') { - // 触发 change 的有三个场景: - // 1. $textContainerElem.on('click keyup') - // 2. $toolbarElem.on('click') - // 3. editor.cmd.do() - this.change = function () { - // 判断是否有变化 - var currentHtml = this.txt.html(); - - if (currentHtml.length === beforeChangeHtml.length) { - // 需要比较每一个字符 - if (currentHtml === beforeChangeHtml) { - return; - } - } - - // 执行,使用节流 - if (onChangeTimeoutId) { - clearTimeout(onChangeTimeoutId); - } - onChangeTimeoutId = setTimeout(function () { - // 触发配置的 onchange 函数 - onchange(currentHtml); - beforeChangeHtml = currentHtml; - }, onchangeTimeout); - }; - } - - // -------- 绑定 onblur 事件 -------- - var onblur = config$$1.onblur; - if (onblur && typeof onblur === 'function') { - this.onblur = function () { - var currentHtml = this.txt.html(); - onblur(currentHtml); - }; - } - - // -------- 绑定 onfocus 事件 -------- - var onfocus = config$$1.onfocus; - if (onfocus && typeof onfocus === 'function') { - this.onfocus = function () { - onfocus(); - }; - } - }, - - // 创建编辑器 - create: function create() { - // 初始化配置信息 - this._initConfig(); - - // 初始化 DOM - this._initDom(); - - // 封装 command API - this._initCommand(); - - // 封装 selection range API - this._initSelectionAPI(); - - // 添加 text - this._initText(); - - // 初始化菜单 - this._initMenus(); - - // 添加 图片上传 - this._initUploadImg(); - - // 初始化选区,将光标定位到内容尾部 - this.initSelection(true); - - // 绑定事件 - this._bindEvent(); - }, - - // 解绑所有事件(暂时不对外开放) - _offAllEvent: function _offAllEvent() { - $.offAll(); - } -}; - -// 检验是否浏览器环境 -try { - document; -} catch (ex) { - throw new Error('请在浏览器环境下运行'); -} - -// polyfill -polyfill(); - -// 这里的 `inlinecss` 将被替换成 css 代码的内容,详情可去 ./gulpfile.js 中搜索 `inlinecss` 关键字 -var inlinecss = '.w-e-toolbar,.w-e-text-container,.w-e-menu-panel { padding: 0; margin: 0; box-sizing: border-box;}.w-e-toolbar *,.w-e-text-container *,.w-e-menu-panel * { padding: 0; margin: 0; box-sizing: border-box;}.w-e-clear-fix:after { content: ""; display: table; clear: both;}.w-e-toolbar .w-e-droplist { position: absolute; left: 0; top: 0; background-color: #fff; border: 1px solid #f1f1f1; border-right-color: #ccc; border-bottom-color: #ccc;}.w-e-toolbar .w-e-droplist .w-e-dp-title { text-align: center; color: #999; line-height: 2; border-bottom: 1px solid #f1f1f1; font-size: 13px;}.w-e-toolbar .w-e-droplist ul.w-e-list { list-style: none; line-height: 1;}.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item { color: #333; padding: 5px 0;}.w-e-toolbar .w-e-droplist ul.w-e-list li.w-e-item:hover { background-color: #f1f1f1;}.w-e-toolbar .w-e-droplist ul.w-e-block { list-style: none; text-align: left; padding: 5px;}.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item { display: inline-block; *display: inline; *zoom: 1; padding: 3px 5px;}.w-e-toolbar .w-e-droplist ul.w-e-block li.w-e-item:hover { background-color: #f1f1f1;}@font-face { font-family: \'w-e-icon\'; src: url(data:application/x-font-woff;charset=utf-8;base64,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) format(\'truetype\'); font-weight: normal; font-style: normal;}[class^="w-e-icon-"],[class*=" w-e-icon-"] { /* use !important to prevent issues with browser extensions that change fonts */ font-family: \'w-e-icon\' !important; speak: none; font-style: normal; font-weight: normal; font-variant: normal; text-transform: none; line-height: 1; /* Better Font Rendering =========== */ -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale;}.w-e-icon-close:before { content: "\\f00d";}.w-e-icon-upload2:before { content: "\\e9c6";}.w-e-icon-trash-o:before { content: "\\f014";}.w-e-icon-header:before { content: "\\f1dc";}.w-e-icon-pencil2:before { content: "\\e906";}.w-e-icon-paint-brush:before { content: "\\f1fc";}.w-e-icon-image:before { content: "\\e90d";}.w-e-icon-play:before { content: "\\e912";}.w-e-icon-location:before { content: "\\e947";}.w-e-icon-undo:before { content: "\\e965";}.w-e-icon-redo:before { content: "\\e966";}.w-e-icon-quotes-left:before { content: "\\e977";}.w-e-icon-list-numbered:before { content: "\\e9b9";}.w-e-icon-list2:before { content: "\\e9bb";}.w-e-icon-link:before { content: "\\e9cb";}.w-e-icon-happy:before { content: "\\e9df";}.w-e-icon-bold:before { content: "\\ea62";}.w-e-icon-underline:before { content: "\\ea63";}.w-e-icon-italic:before { content: "\\ea64";}.w-e-icon-strikethrough:before { content: "\\ea65";}.w-e-icon-table2:before { content: "\\ea71";}.w-e-icon-paragraph-left:before { content: "\\ea77";}.w-e-icon-paragraph-center:before { content: "\\ea78";}.w-e-icon-paragraph-right:before { content: "\\ea79";}.w-e-icon-terminal:before { content: "\\f120";}.w-e-icon-page-break:before { content: "\\ea68";}.w-e-icon-cancel-circle:before { content: "\\ea0d";}.w-e-icon-font:before { content: "\\ea5c";}.w-e-icon-text-heigh:before { content: "\\ea5f";}.w-e-toolbar { display: -webkit-box; display: -ms-flexbox; display: flex; padding: 0 5px; /* flex-wrap: wrap; */ /* 单个菜单 */}.w-e-toolbar .w-e-menu { position: relative; text-align: center; padding: 5px 10px; cursor: pointer;}.w-e-toolbar .w-e-menu i { color: #999;}.w-e-toolbar .w-e-menu:hover i { color: #333;}.w-e-toolbar .w-e-active i { color: #1e88e5;}.w-e-toolbar .w-e-active:hover i { color: #1e88e5;}.w-e-text-container .w-e-panel-container { position: absolute; top: 0; left: 50%; border: 1px solid #ccc; border-top: 0; box-shadow: 1px 1px 2px #ccc; color: #333; background-color: #fff; /* 为 emotion panel 定制的样式 */ /* 上传图片的 panel 定制样式 */}.w-e-text-container .w-e-panel-container .w-e-panel-close { position: absolute; right: 0; top: 0; padding: 5px; margin: 2px 5px 0 0; cursor: pointer; color: #999;}.w-e-text-container .w-e-panel-container .w-e-panel-close:hover { color: #333;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-title { list-style: none; display: -webkit-box; display: -ms-flexbox; display: flex; font-size: 14px; margin: 2px 10px 0 10px; border-bottom: 1px solid #f1f1f1;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-title .w-e-item { padding: 3px 5px; color: #999; cursor: pointer; margin: 0 3px; position: relative; top: 1px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-title .w-e-active { color: #333; border-bottom: 1px solid #333; cursor: default; font-weight: 700;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content { padding: 10px 15px 10px 15px; font-size: 16px; /* 输入框的样式 */ /* 按钮的样式 */}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input:focus,.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea:focus,.w-e-text-container .w-e-panel-container .w-e-panel-tab-content button:focus { outline: none;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea { width: 100%; border: 1px solid #ccc; padding: 5px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content textarea:focus { border-color: #1e88e5;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text] { border: none; border-bottom: 1px solid #ccc; font-size: 14px; height: 20px; color: #333; text-align: left;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text].small { width: 30px; text-align: center;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text].block { display: block; width: 100%; margin: 10px 0;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content input[type=text]:focus { border-bottom: 2px solid #1e88e5;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button { font-size: 14px; color: #1e88e5; border: none; padding: 5px 10px; background-color: #fff; cursor: pointer; border-radius: 3px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.left { float: left; margin-right: 10px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.right { float: right; margin-left: 10px;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.gray { color: #999;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button.red { color: #c24f4a;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container button:hover { background-color: #f1f1f1;}.w-e-text-container .w-e-panel-container .w-e-panel-tab-content .w-e-button-container:after { content: ""; display: table; clear: both;}.w-e-text-container .w-e-panel-container .w-e-emoticon-container .w-e-item { cursor: pointer; font-size: 18px; padding: 0 3px; display: inline-block; *display: inline; *zoom: 1;}.w-e-text-container .w-e-panel-container .w-e-up-img-container { text-align: center;}.w-e-text-container .w-e-panel-container .w-e-up-img-container .w-e-up-btn { display: inline-block; *display: inline; *zoom: 1; color: #999; cursor: pointer; font-size: 60px; line-height: 1;}.w-e-text-container .w-e-panel-container .w-e-up-img-container .w-e-up-btn:hover { color: #333;}.w-e-text-container { position: relative;}.w-e-text-container .w-e-progress { position: absolute; background-color: #1e88e5; bottom: 0; left: 0; height: 1px;}.w-e-text { padding: 0 10px; overflow-y: scroll;}.w-e-text p,.w-e-text h1,.w-e-text h2,.w-e-text h3,.w-e-text h4,.w-e-text h5,.w-e-text table,.w-e-text pre { margin: 10px 0; line-height: 1.5;}.w-e-text ul,.w-e-text ol { margin: 10px 0 10px 20px;}.w-e-text blockquote { display: block; border-left: 8px solid #d0e5f2; padding: 5px 10px; margin: 10px 0; line-height: 1.4; font-size: 100%; background-color: #f1f1f1;}.w-e-text code { display: inline-block; *display: inline; *zoom: 1; background-color: #f1f1f1; border-radius: 3px; padding: 3px 5px; margin: 0 3px;}.w-e-text pre code { display: block;}.w-e-text table { border-top: 1px solid #ccc; border-left: 1px solid #ccc;}.w-e-text table td,.w-e-text table th { border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; padding: 3px 5px;}.w-e-text table th { border-bottom: 2px solid #ccc; text-align: center;}.w-e-text:focus { outline: none;}.w-e-text img { cursor: pointer;}.w-e-text img:hover { box-shadow: 0 0 5px #333;}'; - -// 将 css 代码添加到 姓名年龄xxxyyyxx张三18xxxFAfx张三18xxxFAfx张三18xxxFAfx张三18xxxFAfx张三18xxxFAfx张三18xxxFAfx张三18xxxFAfx张三18xxxFAfx张三18xxxFAfx张三18xxxFAfx张三18xxxFAfx张三18xxxFAfx张三18xxxFAfx张三18xxxFAfx张三18xxxFAfx