/**
* @description tooltip 事件
* @author lichunlin
*/
import $, { DomElement } from '../../../utils/dom-core'
import Tooltip, { TooltipConfType } from '../../menu-constructors/Tooltip'
import Editor from '../../../editor/index'
/**
* 生成一个图片指定大小的拖拽框
* @param editor 编辑器实例
* @param $textContainerElem 编辑框对象
*/
function createDragBox(editor: Editor, $textContainerElem: DomElement): DomElement {
const $drag = $(
`
`
)
$drag.hide()
$textContainerElem.append($drag)
return $drag
}
/**
* 生成 Tooltip 的显示隐藏函数
*/
function createShowHideFn(editor: Editor) {
let tooltip: Tooltip | null
const t = (text: string, prefix: string = ''): string => {
return editor.i18next.t(prefix + text)
}
const $textContainerElem = editor.$textContainerElem
const $drag = createDragBox(editor, $textContainerElem)
/**
* 显示 tooltip
* @param $node 链接元素
*/
function showImgTooltip($node: DomElement) {
const conf: TooltipConfType = [
{
$elem: $(""),
onClick: (editor: Editor, $node: DomElement) => {
// 选中img元素
editor.selection.createRangeByElem($node)
editor.selection.restoreSelection()
editor.cmd.do('delete')
// 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
return true
},
},
{
$elem: $('30%'),
onClick: (editor: Editor, $node: DomElement) => {
$node.attr('width', '30%')
$node.removeAttr('height')
// 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
return true
},
},
{
$elem: $('50%'),
onClick: (editor: Editor, $node: DomElement) => {
$node.attr('width', '50%')
$node.removeAttr('height')
// 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
return true
},
},
{
$elem: $('100%'),
onClick: (editor: Editor, $node: DomElement) => {
$node.attr('width', '100%')
$node.removeAttr('height')
// 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
return true
},
},
{
$elem: $(`${t('自定义尺寸')}`),
onClick: (editor: Editor, $node: DomElement) => {
$drag.show()
let close = $drag.find('.modalbox-close-btn')
let but = $drag.find('.button2')
let modal = $drag.find('.w-modalbox')
modal.on('click', function(){//没什么用
$drag.hide()
})
close.on('click', function(){
$drag.hide()
})
but.on('click', function(){
let width = $drag.find('#width').val()
let height = $drag.find('#height').val()
if(width || height){
$node.attr('width', width +'px')
$node.attr('height', height +'px')
}else{
$node.attr('width', '320px')
$node.attr('height', '240px')
}
$drag.hide()
})
// 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
return true
},
},
{
$elem: $(`${t('重置')}`),
onClick: (editor: Editor, $node: DomElement) => {
$node.removeAttr('width')
$node.removeAttr('height')
// 返回 true,表示执行完之后,隐藏 tooltip。否则不隐藏。
return true
},
},
]
tooltip = new Tooltip(editor, $node, conf)
tooltip.create()
}
/**
* 隐藏 tooltip
*/
function hideImgTooltip() {
// 移除 tooltip
if (tooltip) {
tooltip.remove()
tooltip = null
}
}
return {
showImgTooltip,
hideImgTooltip,
}
}
/**
* 绑定 tooltip 事件
* @param editor 编辑器实例
*/
export default function bindTooltipEvent(editor: Editor) {
const { showImgTooltip, hideImgTooltip } = createShowHideFn(editor)
// 点击图片元素是,显示 tooltip
editor.txt.eventHooks.videoClickEvents.push(showImgTooltip)
// 点击其他地方,或者滚动时,隐藏 tooltip
editor.txt.eventHooks.clickEvents.push(hideImgTooltip)
editor.txt.eventHooks.keyupEvents.push(hideImgTooltip)
editor.txt.eventHooks.toolbarClickEvents.push(hideImgTooltip)
editor.txt.eventHooks.menuClickEvents.push(hideImgTooltip)
editor.txt.eventHooks.textScrollEvents.push(hideImgTooltip)
editor.txt.eventHooks.imgDragBarMouseDownEvents.push(hideImgTooltip)
// change 时隐藏
editor.txt.eventHooks.changeEvents.push(hideImgTooltip)
}