/* menu - emoticon */ import $ from '../../util/dom-core.js' import Panel from '../panel.js' // 构造函数 function Emoticon(editor) { this.editor = editor this.$elem = $( `
` ) 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 += '' + item + '' } }) } // 图片表情 if (emotType === 'image') { content.forEach(item => { const src = item.src const 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: (e) => { const target = e.target const $target = $(target) const nodeName = $target.getNodeName() let insertHtml if (nodeName === 'IMG') { // 插入图片 insertHtml = $target.parent().html() } else { // 插入 emoji insertHtml = '' + $target.html() + '' } 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