/*
|
menu - emoticon
|
*/
|
import $ from '../../util/dom-core.js'
|
import Panel from '../panel.js'
|
|
// 构造函数
|
function Emoticon(editor) {
|
this.editor = editor
|
this.$elem = $(
|
`<div class="w-e-menu">
|
<i class="w-e-icon-happy"></i>
|
</div>`
|
)
|
this.type = 'panel'
|
|
// 当前是否 active 状态
|
this._active = false
|
}
|
|
// 原型
|
Emoticon.prototype = {
|
constructor: Emoticon,
|
|
onClick: function () {
|
this._createPanel()
|
},
|
|
_createPanel: function () {
|
const editor = this.editor
|
const config = editor.config
|
// 获取表情配置
|
const emotions = config.emotions || []
|
|
// 创建表情 dropPanel 的配置
|
const tabConfig = []
|
emotions.forEach(emotData => {
|
const emotType = emotData.type
|
const content = emotData.content || []
|
|
// 这一组表情最终拼接出来的 html
|
let faceHtml = ''
|
|
// emoji 表情
|
if (emotType === 'emoji') {
|
content.forEach(item => {
|
if (item) {
|
faceHtml += '<span class="w-e-item">' + item + '</span>'
|
}
|
})
|
}
|
// 图片表情
|
if (emotType === 'image') {
|
content.forEach(item => {
|
const src = item.src
|
const alt = item.alt
|
if (src) {
|
// 加一个 data-w-e 属性,点击图片的时候不再提示编辑图片
|
faceHtml += '<span class="w-e-item"><img src="' + src + '" alt="' + alt + '" data-w-e="1"/></span>'
|
}
|
})
|
}
|
|
tabConfig.push({
|
title: emotData.title,
|
tpl: `<div class="w-e-emoticon-container">${faceHtml}</div>`,
|
events: [
|
{
|
selector: 'span.w-e-item',
|
type: 'click',
|
fn: (e) => {
|
const target = e.target
|
const $target = $(target)
|
const nodeName = $target.getNodeName()
|
|
let insertHtml
|
if (nodeName === 'IMG') {
|
// 插入图片
|
insertHtml = $target.parent().html()
|
} else {
|
// 插入 emoji
|
insertHtml = '<span>' + $target.html() + '</span>'
|
}
|
|
this._insert(insertHtml)
|
// 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭
|
return true
|
}
|
}
|
]
|
})
|
})
|
|
const panel = new Panel(this, {
|
width: 300,
|
height: 200,
|
// 一个 Panel 包含多个 tab
|
tabs: tabConfig
|
})
|
|
// 显示 panel
|
panel.show()
|
|
// 记录属性
|
this.panel = panel
|
},
|
|
// 插入表情
|
_insert: function (emotHtml) {
|
const editor = this.editor
|
editor.cmd.do('insertHTML', emotHtml)
|
}
|
}
|
|
export default Emoticon
|