UNPKG

wangeditor

Version:

wangEditor - 轻量级 web 富文本编辑器,配置方便,使用简单,开源免费

79 lines (69 loc) 2.16 kB
/** * @description 链接 菜单 * @author wangfupeng */ import PanelMenu from '../menu-constructors/PanelMenu' import Editor from '../../editor/index' import $ from '../../utils/dom-core' import createPanelConf from './create-panel-conf' import isActive from './is-active' import Panel from '../menu-constructors/Panel' import { MenuActive } from '../menu-constructors/Menu' import bindEvent from './bind-event/index' class Link extends PanelMenu implements MenuActive { constructor(editor: Editor) { const $elem = $( '<div class="w-e-menu" data-title="链接"><i class="w-e-icon-link"></i></div>' ) super($elem, editor) // 绑定事件,如点击链接时,可以查看链接 bindEvent(editor) } /** * 菜单点击事件 */ public clickHandler(): void { const editor = this.editor let $linkElem if (this.isActive) { // 菜单被激活,说明选区在链接里 $linkElem = editor.selection.getSelectionContainerElem() if (!$linkElem) { return } // 弹出 panel this.createPanel($linkElem.text(), $linkElem.attr('href')) } else { // 菜单未被激活,说明选区不在链接里 if (editor.selection.isSelectionEmpty()) { // 选区是空的,未选中内容 this.createPanel('', '') } else { // 选中内容了 this.createPanel(editor.selection.getSelectionText(), '') } } } /** * 创建 panel * @param text 文本 * @param link 链接 */ private createPanel(text: string, link: string): void { const conf = createPanelConf(this.editor, text, link) const panel = new Panel(this, conf) panel.create() } /** * 尝试修改菜单 active 状态 */ public tryChangeActive() { const editor = this.editor if (isActive(editor)) { this.active() } else { this.unActive() } } } export default Link