{"version":3,"sources":["wangEditor.js"],"names":["global","factory","exports","module","define","amd","wangEditor","this","createElemByHTML","html","div","document","createElement","innerHTML","children","isDOMList","selector","HTMLCollection","NodeList","querySelectorAll","result","DomElement","selectorResult","nodeType","replace","trim","indexOf","length","i","$","objForEach","obj","fn","key","hasOwnProperty","call","arrForEach","fakeArr","item","getRandom","prefix","Math","random","toString","slice","replaceHtmlSymbol","Bold","editor","$elem","type","_active","DropList","menu","opt","_this","$container","$title","addClass","append","list","onClick","_emptyFn","$list","forEach","value","$li","on","e","hideTimeoutId","setTimeout","hide","_rendered","_show","Head","droplist","width","_command","Panel","Link","Italic","Redo","StrikeThrough","Underline","Undo","List","Justify","BackColor","ForeColor$1","Quote","Code","Emoticon","Table","Video","Image","Menus","menus","getPasteText","clipboardData","originalEvent","pasteText","window","getData","getPasteHtml","pasteHtml","docSplitHtml","split","getPasteImgs","items","test","push","getAsFile","Text","Command","API","_currentRange","Progress","_time","_isShow","_isRender","_timeoutId","$textContainer","$textContainerElem","$bar","UploadImg","Editor","toolbarSelector","textSelector","Error","id","editorId","customConfig","prototype","constructor","elem","get","index","first","last","types","addEventListener","target","matches","off","removeEventListener","attr","val","getAttribute","setAttribute","className","arr","filter","join","removeClass","css","currentStyle","style","styleArr","resultArr","map","show","$children","child","appendChild","remove","parent","parentElement","removeChild","isContain","$child","contains","getSizeData","getBoundingClientRect","getNodeName","nodeName","find","text","focus","parentUntil","_currentElem","results","equal","insertBefore","$referenceNode","referenceNode","parentNode","insertAfter","lastChild","nextSibling","config","zIndex","debug","showLinkImg","uploadImgMaxSize","uploadImgShowBase64","uploadFileName","uploadImgParams","token","uploadImgHeaders","withCredentials","uploadImgTimeout","uploadImgHooks","before","xhr","files","success","fail","error","timeout","UA","_ua","navigator","userAgent","isWebkit","isIE","isSeleEmpty","selection","isSelectionEmpty","createEmptyRange","cmd","do","collapseRange","restoreSelection","tryChangeActive","queryCommandState","clearTimeout","$menuELem","menuHeight","height","showTimeoutId","reg","cmdValue","queryCommandValue","emptyFn","_isCreatedPanelMenus","$body","$closeBtn","$tabTitleContainer","$tabContentContainer","tabs","tabTitleArr","tabContentArr","tab","tabIndex","title","tpl","$content","_index","stopPropagation","events","event","$inputs","_hideOtherPanels","panel","$linkelem","getSelectionContainerElem","createRangeByElem","_createPanel","getSelectionText","link","inputLinkId","inputTextId","btnOkId","btnDelId","delBtnDisplay","$link","$text","_insertLink","_delLink","selectionText","$selectionELem","$textElem","$selectionElem","$parent","$startElem","getSelectionStartElem","$endElem","getSelectionEndElem","$code","textId","btnId","_insertCode","_updateCode","$parentElem","faceHtml","handHtml","_insert","emoji","_createEditPanel","_createInsertPanel","btnInsertId","textRowNum","textColNum","rowNum","parseInt","colNum","r","c","_this2","addRowBtnId","addColBtnId","delRowBtnId","delColBtnId","delTableBtnId","_addRow","_addCol","_delRow","_delCol","_delTable","_getLocationData","$tr","$tds","tdLength","td","$tbody","$trs","trLength","tr","locationData","trData","$currentTr","tdData","newTr","tdIndex","$currentTd","name","toLowerCase","$table","textValId","width30","width50","width100","delBtn","tabsConfig","$img","_selectedImg","uploadImg","upTriggerId","upFileId","linkUrlId","linkBtnId","$file","fileElem","click","fileList","$linkUrl","url","insertLinkImg","tabsConfigResult","uploadImgServer","FileReader","MenuConstructors","bold","head","italic","redo","strikeThrough","underline","undo","justify","foreColor","backColor","quote","code","emoticon","table","video","image","init","menuKey","MenuConstructor","_addToToolbar","_bindEvent","$toolbarElem","getRange","changeActive","clear","initSelection","_saveRangeRealTime","_enterKeyHandle","_clearHandle","_pasteHandle","_tabHandle","_imgHandle","saveRange","pHandle","$p","codeHandle","selectionNodeName","parentNodeName","queryCommandSupported","_startOffset","startOffset","preventDefault","keyCode","txtHtml","ex","pasteFiles","img","_name","_execCommand","change","_insertHTML","range","insertNode","deleteContents","pasteHTML","_insertElem","execCommand","_range","getSelection","rangeCount","getRangeAt","$containerElem","toStart","collapse","commonAncestorContainer","startContainer","endContainer","endOffset","removeAllRanges","addRange","setEnd","isContent","createRange","selectNodeContents","selectNode","progress","Date","now","timeoutId","_hide","_typeof","Symbol","iterator","_alert","alertInfo","debugInfo","alert","onload","onerror","onabort","src","_this3","maxSize","maxSizeM","maxLength","uploadImgMaxLength","hooks","resultFiles","errInfo","file","size","formdata","FormData","uploadImgServerArr","uploadImgServerHash","encodeURIComponent","XMLHttpRequest","open","ontimeout","upload","onprogress","percent","progressBar","lengthComputable","loaded","total","onreadystatechange","readyState","status","responseText","JSON","parse","customInsert","errno","bind","data","setRequestHeader","send","reader","readAsDataURL","_initConfig","Object","assign","_initDom","$toolbarSelector","config$$1","_initCommand","_initSelectionAPI","_initUploadImg","_initMenus","_initText","txt","$last","onChangeTimeoutId","beforeChangeHtml","onchange","currentHtml","create","varArgs","TypeError","to","arguments","nextSource","nextKey","Element","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","s","ownerDocument","getElementsByTagName"],"mappings":"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","file":"wangEditor.min.js","sourcesContent":["(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n\ttypeof define === 'function' && define.amd ? define(factory) :\n\t(global.wangEditor = factory());\n}(this, (function () { 'use strict';\n\n/*\n poly-fill\n*/\n\nvar polyfill = function () {\n\n // Object.assign\n if (typeof Object.assign != 'function') {\n Object.assign = function (target, varArgs) {\n // .length of function is 2\n if (target == null) {\n // TypeError if undefined or null\n throw new TypeError('Cannot convert undefined or null to object');\n }\n\n var to = Object(target);\n\n for (var index = 1; index < arguments.length; index++) {\n var nextSource = arguments[index];\n\n if (nextSource != null) {\n // Skip over if undefined or null\n for (var nextKey in nextSource) {\n // Avoid bugs when hasOwnProperty is shadowed\n if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) {\n to[nextKey] = nextSource[nextKey];\n }\n }\n }\n }\n return to;\n };\n }\n\n // IE 中兼容 Element.prototype.matches\n if (!Element.prototype.matches) {\n Element.prototype.matches = Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector || function (s) {\n var matches = (this.document || this.ownerDocument).querySelectorAll(s),\n i = matches.length;\n while (--i >= 0 && matches.item(i) !== this) {}\n return i > -1;\n };\n }\n};\n\n/*\n DOM 操作 API\n*/\n\n// 根据 html 代码片段创建 dom 对象\nfunction createElemByHTML(html) {\n var div = void 0;\n div = document.createElement('div');\n div.innerHTML = html;\n return div.children;\n}\n\n// 是否是 DOM List\nfunction isDOMList(selector) {\n if (!selector) {\n return false;\n }\n if (selector instanceof HTMLCollection || selector instanceof NodeList) {\n return true;\n }\n return false;\n}\n\n// 封装 document.querySelectorAll\nfunction querySelectorAll(selector) {\n var result = document.querySelectorAll(selector);\n if (isDOMList(result)) {\n return result;\n } else {\n return [result];\n }\n}\n\n// 创建构造函数\nfunction DomElement(selector) {\n if (!selector) {\n return;\n }\n\n // selector 本来就是 DomElement 对象,直接返回\n if (selector instanceof DomElement) {\n return selector;\n }\n\n this.selector = selector;\n\n // 根据 selector 得出的结果(如 DOM,DOM List)\n var selectorResult = [];\n if (selector.nodeType === 1) {\n // 单个 DOM 节点\n selectorResult = [selector];\n } else if (isDOMList(selector)) {\n // DOM List\n selectorResult = selector;\n } else if (typeof selector === 'string') {\n // 字符串\n selector = selector.replace('/\\n/mg', '').trim();\n if (selector.indexOf('<') === 0) {\n // 如
设置标题
'),\n type: 'list', // droplist 以列表形式展示\n list: [{ $elem: $('正文
'), value: '' }],\n onClick: function onClick(value) {\n // 注意 this 是指向当前的 Head 对象\n _this._command(value);\n }\n });\n}\n\n// 原型\nHead.prototype = {\n constructor: Head,\n\n // 执行命令\n _command: function _command(value) {\n var editor = this.editor;\n editor.cmd.do('formatBlock', value);\n },\n\n // 试图改变 active 状态\n tryChangeActive: function tryChangeActive(e) {\n var editor = this.editor;\n var $elem = this.$elem;\n var reg = /^h/i;\n var cmdValue = editor.cmd.queryCommandValue('formatBlock');\n if (reg.test(cmdValue)) {\n this._active = true;\n $elem.addClass('w-e-active');\n } else {\n this._active = false;\n $elem.removeClass('w-e-active');\n }\n }\n};\n\n/*\n panel\n*/\n\nvar emptyFn = function emptyFn() {};\n\n// 记录已经显示 panel 的菜单\nvar _isCreatedPanelMenus = [];\n\n// 构造函数\nfunction Panel(menu, opt) {\n this.menu = menu;\n this.opt = opt;\n}\n\n// 原型\nPanel.prototype = {\n constructor: Panel,\n\n // 显示(插入DOM)\n show: function show() {\n var _this = this;\n\n var menu = this.menu;\n if (_isCreatedPanelMenus.indexOf(menu) >= 0) {\n // 该菜单已经创建了 panel 不能再创建\n return;\n }\n\n var editor = menu.editor;\n var $body = $('body');\n var $textContainerElem = editor.$textContainerElem;\n var opt = this.opt;\n\n // panel 的容器\n var $container = $('
');\n var width = opt.width || 300; // 默认 300px\n $container.css('width', width + 'px').css('margin-left', (0 - width) / 2 + 'px');\n\n // 添加关闭按钮\n var $closeBtn = $('');\n $container.append($closeBtn);\n $closeBtn.on('click', function () {\n _this.hide();\n });\n\n // 准备 tabs 容器\n var $tabTitleContainer = $('设置列表
'),\n type: 'list', // droplist 以列表形式展示\n list: [{ $elem: $(' 有序列表'), value: 'insertOrderedList' }, { $elem: $(' 无序列表'), value: 'insertUnorderedList' }],\n onClick: function onClick(value) {\n // 注意 this 是指向当前的 List 对象\n _this._command(value);\n }\n });\n}\n\n// 原型\nList.prototype = {\n constructor: List,\n\n // 执行命令\n _command: function _command(value) {\n var editor = this.editor;\n var $textElem = editor.$textElem;\n editor.selection.restoreSelection();\n if (editor.cmd.queryCommandState(value)) {\n return;\n }\n editor.cmd.do(value);\n\n // 验证列表是否被包裹在之内\n var $selectionElem = editor.selection.getSelectionContainerElem();\n if ($selectionElem.getNodeName() === 'LI') {\n $selectionElem = $selectionElem.parent();\n }\n if (/^ol|ul$/i.test($selectionElem.getNodeName()) === false) {\n return;\n }\n if ($selectionElem.equal($textElem)) {\n // 证明是顶级标签,没有被
包裹\n return;\n }\n var $parent = $selectionElem.parent();\n if ($parent.equal($textElem)) {\n // $parent 是顶级标签,不能删除\n return;\n }\n\n $selectionElem.insertAfter($parent);\n $parent.remove();\n },\n\n // 试图改变 active 状态\n tryChangeActive: function tryChangeActive(e) {\n var editor = this.editor;\n var $elem = this.$elem;\n if (editor.cmd.queryCommandState('insertUnOrderedList') || editor.cmd.queryCommandState('insertOrderedList')) {\n this._active = true;\n $elem.addClass('w-e-active');\n } else {\n this._active = false;\n $elem.removeClass('w-e-active');\n }\n }\n};\n\n/*\n menu - justify\n*/\n// 构造函数\nfunction Justify(editor) {\n var _this = this;\n\n this.editor = editor;\n this.$elem = $('
');\n this.type = 'droplist';\n\n // 当前是否 active 状态\n this._active = false;\n\n // 初始化 droplist\n this.droplist = new DropList(this, {\n width: 100,\n $title: $('对齐方式
'),\n type: 'list', // droplist 以列表形式展示\n list: [{ $elem: $(' 靠左'), value: 'justifyLeft' }, { $elem: $(' 居中'), value: 'justifyCenter' }, { $elem: $(' 靠右'), value: 'justifyRight' }],\n onClick: function onClick(value) {\n // 注意 this 是指向当前的 List 对象\n _this._command(value);\n }\n });\n}\n\n// 原型\nJustify.prototype = {\n constructor: Justify,\n\n // 执行命令\n _command: function _command(value) {\n var editor = this.editor;\n editor.cmd.do(value);\n }\n};\n\n/*\n menu - backcolor\n*/\n// 构造函数\nfunction BackColor(editor) {\n var _this = this;\n\n this.editor = editor;\n this.$elem = $(' ');\n this.type = 'droplist';\n\n // 当前是否 active 状态\n this._active = false;\n\n // 初始化 droplist\n this.droplist = new DropList(this, {\n width: 120,\n $title: $('文字颜色
'),\n type: 'inline-block', // droplist 内容以 block 形式展示\n list: [{ $elem: $(''), value: '#000000' }, { $elem: $(''), value: '#eeece0' }, { $elem: $(''), value: '#1c487f' }, { $elem: $(''), value: '#4d80bf' }, { $elem: $(''), value: '#c24f4a' }, { $elem: $(''), value: '#8baa4a' }, { $elem: $(''), value: '#7b5ba1' }, { $elem: $(''), value: '#46acc8' }, { $elem: $(''), value: '#f9963b' }, { $elem: $(''), value: '#ffffff' }],\n onClick: function onClick(value) {\n // 注意 this 是指向当前的 BackColor 对象\n _this._command(value);\n }\n });\n}\n\n// 原型\nBackColor.prototype = {\n constructor: BackColor,\n\n // 执行命令\n _command: function _command(value) {\n var editor = this.editor;\n editor.cmd.do('foreColor', value);\n }\n};\n\n/*\n menu - forecolor\n*/\n// 构造函数\nfunction ForeColor$1(editor) {\n var _this = this;\n\n this.editor = editor;\n this.$elem = $(' ');\n this.type = 'droplist';\n\n // 当前是否 active 状态\n this._active = false;\n\n // 初始化 droplist\n this.droplist = new DropList(this, {\n width: 120,\n $title: $('背景色
'),\n type: 'inline-block', // droplist 内容以 block 形式展示\n list: [{ $elem: $(''), value: '#000000' }, { $elem: $(''), value: '#eeece0' }, { $elem: $(''), value: '#1c487f' }, { $elem: $(''), value: '#4d80bf' }, { $elem: $(''), value: '#c24f4a' }, { $elem: $(''), value: '#8baa4a' }, { $elem: $(''), value: '#7b5ba1' }, { $elem: $(''), value: '#46acc8' }, { $elem: $(''), value: '#f9963b' }, { $elem: $(''), value: '#ffffff' }],\n onClick: function onClick(value) {\n // 注意 this 是指向当前的 ForeColor 对象\n _this._command(value);\n }\n });\n}\n\n// 原型\nForeColor$1.prototype = {\n constructor: ForeColor$1,\n\n // 执行命令\n _command: function _command(value) {\n var editor = this.editor;\n editor.cmd.do('backColor', value);\n }\n};\n\n/*\n menu - quote\n*/\n// 构造函数\nfunction Quote(editor) {\n this.editor = editor;\n this.$elem = $(' ');\n this.type = 'click';\n\n // 当前是否 active 状态\n this._active = false;\n}\n\n// 原型\nQuote.prototype = {\n constructor: Quote,\n\n onClick: function onClick(e) {\n var editor = this.editor;\n editor.cmd.do('formatBlock', '');\n },\n\n tryChangeActive: function tryChangeActive(e) {\n var editor = this.editor;\n var $elem = this.$elem;\n var reg = /^BLOCKQUOTE$/i;\n var cmdValue = editor.cmd.queryCommandValue('formatBlock');\n if (reg.test(cmdValue)) {\n this._active = true;\n $elem.addClass('w-e-active');\n } else {\n this._active = false;\n $elem.removeClass('w-e-active');\n }\n }\n};\n\n/*\n menu - code\n*/\n// 构造函数\nfunction Code(editor) {\n this.editor = editor;\n this.$elem = $(' 包裹即可\n $code = $('' + selectionText + '
');\n editor.cmd.do('insertElem', $code);\n editor.selection.createRangeByElem($code, false);\n editor.selection.restoreSelection();\n return;\n }\n\n // 选取是空,且没有夸元素选择,则插入
\n if (this._active) {\n // 选中状态,将编辑内容\n this._createPanel($startElem.html());\n } else {\n // 未选中状态,将创建内容\n this._createPanel();\n }\n },\n\n _createPanel: function _createPanel(value) {\n var _this = this;\n\n // value - 要编辑的内容\n value = value || '';\n var type = !value ? 'new' : 'edit';\n var textId = getRandom('texxt');\n var btnId = getRandom('btn');\n\n var panel = new Panel(this, {\n width: 500,\n // 一个 Panel 包含多个 tab\n tabs: [{\n // 标题\n title: '插入代码',\n // 模板\n tpl: '\\n \\n ',\n // 事件绑定\n events: [\n // 插入代码\n {\n selector: '#' + btnId,\n type: 'click',\n fn: function fn() {\n var $text = $('#' + textId);\n var text = $text.val() || $text.html();\n text = replaceHtmlSymbol(text);\n if (type === 'new') {\n // 新插入\n _this._insertCode(text);\n } else {\n // 编辑更新\n _this._updateCode(text);\n }\n\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true;\n }\n }]\n } // first tab end\n ] // tabs end\n }); // new Panel end\n\n // 显示 panel\n panel.show();\n\n // 记录属性\n this.panel = panel;\n },\n\n // 插入代码\n _insertCode: function _insertCode(value) {\n var editor = this.editor;\n editor.cmd.do('insertHTML', '' + value + '
');\n },\n\n // 更新代码\n _updateCode: function _updateCode(value) {\n var editor = this.editor;\n var $selectionELem = editor.selection.getSelectionContainerElem();\n if (!$selectionELem) {\n return;\n }\n $selectionELem.html(value);\n editor.selection.restoreSelection();\n },\n\n // 试图改变 active 状态\n tryChangeActive: function tryChangeActive(e) {\n var editor = this.editor;\n var $elem = this.$elem;\n var $selectionELem = editor.selection.getSelectionContainerElem();\n if (!$selectionELem) {\n return;\n }\n var $parentElem = $selectionELem.parent();\n if ($selectionELem.getNodeName() === 'CODE' && $parentElem.getNodeName() === 'PRE') {\n this._active = true;\n $elem.addClass('w-e-active');\n } else {\n this._active = false;\n $elem.removeClass('w-e-active');\n }\n }\n};\n\n/*\n menu - emoticon\n*/\n// 构造函数\nfunction Emoticon(editor) {\n this.editor = editor;\n this.$elem = $(' ');\n this.type = 'panel';\n\n // 当前是否 active 状态\n this._active = false;\n}\n\n// 原型\nEmoticon.prototype = {\n constructor: Emoticon,\n\n onClick: function onClick() {\n this._createPanel();\n },\n\n _createPanel: function _createPanel() {\n var _this = this;\n\n // 拼接表情字符串\n var faceHtml = '';\n var faceStr = '😀 😃 😄 😁 😆 😅 😂 😊 😇 🙂 🙃 😉 😌 😍 😘 😗 😙 😚 😋 😜 😝 😛 🤑 🤗 🤓 😎 😏 😒 😞 😔 😟 😕 🙁 😣 😖 😫 😩 😤 😠 😡 😶 😐 😑 😯 😦 😧 😮 😲 😵 😳 😱 😨 😰 😢 😥 😭 😓 😪 😴 🙄 🤔 😬 🤐';\n faceStr.split(/\\s/).forEach(function (item) {\n if (item) {\n faceHtml += '' + item + '';\n }\n });\n\n var handHtml = '';\n var handStr = '🙌 👏 👋 👍 👎 👊 ✊ ️👌 ✋ 👐 💪 🙏 ️👆 👇 👈 👉 🖕 🖐 🤘 🖖';\n handStr.split(/\\s/).forEach(function (item) {\n if (item) {\n handHtml += '' + item + '';\n }\n });\n\n var panel = new Panel(this, {\n width: 300,\n height: 200,\n // 一个 Panel 包含多个 tab\n tabs: [{\n // 标题\n title: '表情',\n // 模板\n tpl: '' + faceHtml + '',\n // 事件绑定\n events: [{\n selector: 'span.w-e-item',\n type: 'click',\n fn: function fn(e) {\n var target = e.target;\n _this._insert(target.innerHTML);\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true;\n }\n }]\n }, // first tab end\n {\n // 标题\n title: '手势',\n // 模板\n tpl: '' + handHtml + '',\n // 事件绑定\n events: [{\n selector: 'span.w-e-item',\n type: 'click',\n fn: function fn(e) {\n var target = e.target;\n _this._insert(target.innerHTML);\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true;\n }\n }]\n } // second tab end\n ] // tabs end\n });\n\n // 显示 panel\n panel.show();\n\n // 记录属性\n this.panel = panel;\n },\n\n // 插入表情\n _insert: function _insert(emoji) {\n var editor = this.editor;\n editor.cmd.do('insertHTML', '' + emoji + '');\n }\n};\n\n/*\n menu - table\n*/\n// 构造函数\nfunction Table(editor) {\n this.editor = editor;\n this.$elem = $(' ');\n this.type = 'panel';\n\n // 当前是否 active 状态\n this._active = false;\n}\n\n// 原型\nTable.prototype = {\n constructor: Table,\n\n onClick: function onClick() {\n if (this._active) {\n // 编辑现有表格\n this._createEditPanel();\n } else {\n // 插入新表格\n this._createInsertPanel();\n }\n },\n\n // 创建插入新表格的 panel\n _createInsertPanel: function _createInsertPanel() {\n var _this = this;\n\n // 用到的 id\n var btnInsertId = getRandom('btn');\n var textRowNum = getRandom('row');\n var textColNum = getRandom('col');\n\n var panel = new Panel(this, {\n width: 250,\n // panel 包含多个 tab\n tabs: [{\n // 标题\n title: '插入表格',\n // 模板\n tpl: '\\n \\n \\u521B\\u5EFA\\n \\n \\u884C\\n \\n \\u5217\\u7684\\u8868\\u683C\\n
\\n \\n ',\n // 事件绑定\n events: [{\n // 点击按钮,插入表格\n selector: '#' + btnInsertId,\n type: 'click',\n fn: function fn() {\n var rowNum = parseInt($('#' + textRowNum).val());\n var colNum = parseInt($('#' + textColNum).val());\n\n if (rowNum && colNum && rowNum > 0 && colNum > 0) {\n // form 数据有效\n _this._insert(rowNum, colNum);\n }\n\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true;\n }\n }]\n } // first tab end\n ] // tabs end\n }); // panel end\n\n // 展示 panel\n panel.show();\n\n // 记录属性\n this.panel = panel;\n },\n\n // 插入表格\n _insert: function _insert(rowNum, colNum) {\n // 拼接 table 模板\n var r = void 0,\n c = void 0;\n var html = '';\n for (r = 0; r < rowNum; r++) {\n html += '';\n if (r === 0) {\n for (c = 0; c < colNum; c++) {\n html += ' ';\n }\n } else {\n for (c = 0; c < colNum; c++) {\n html += ' ';\n }\n }\n html += ' ';\n }\n html += '
';\n\n // 执行命令\n var editor = this.editor;\n editor.cmd.do('insertHTML', html);\n\n // 防止 firefox 下出现 resize 的控制点\n editor.cmd.do('enableObjectResizing', false);\n editor.cmd.do('enableInlineTableEditing', false);\n },\n\n // 创建编辑表格的 panel\n _createEditPanel: function _createEditPanel() {\n var _this2 = this;\n\n // 可用的 id\n var addRowBtnId = getRandom('add-row');\n var addColBtnId = getRandom('add-col');\n var delRowBtnId = getRandom('del-row');\n var delColBtnId = getRandom('del-col');\n var delTableBtnId = getRandom('del-table');\n\n // 创建 panel 对象\n var panel = new Panel(this, {\n width: 320,\n // panel 包含多个 tab\n tabs: [{\n // 标题\n title: '编辑表格',\n // 模板\n tpl: '\\n ';\n }\n newTr.innerHTML = tpl;\n // 插入\n $(newTr).insertAfter($currentTr);\n },\n\n // 增加列\n _addCol: function _addCol() {\n // 获取当前单元格的位置信息\n var locationData = this._getLocationData();\n if (!locationData) {\n return;\n }\n var trData = locationData.tr;\n var tdData = locationData.td;\n var tdIndex = tdData.index;\n var $currentTr = $(trData.elem);\n var $trParent = $currentTr.parent();\n var $trs = $trParent.children();\n\n // 遍历所有行\n $trs.forEach(function (tr) {\n var $tr = $(tr);\n var $tds = $tr.children();\n var $currentTd = $tds.get(tdIndex);\n var name = $currentTd.getNodeName().toLowerCase();\n\n // new 一个 td,并插入\n var newTd = document.createElement(name);\n $(newTd).insertAfter($currentTd);\n });\n },\n\n // 删除行\n _delRow: function _delRow() {\n // 获取当前单元格的位置信息\n var locationData = this._getLocationData();\n if (!locationData) {\n return;\n }\n var trData = locationData.tr;\n var $currentTr = $(trData.elem);\n $currentTr.remove();\n },\n\n // 删除列\n _delCol: function _delCol() {\n // 获取当前单元格的位置信息\n var locationData = this._getLocationData();\n if (!locationData) {\n return;\n }\n var trData = locationData.tr;\n var tdData = locationData.td;\n var tdIndex = tdData.index;\n var $currentTr = $(trData.elem);\n var $trParent = $currentTr.parent();\n var $trs = $trParent.children();\n\n // 遍历所有行\n $trs.forEach(function (tr) {\n var $tr = $(tr);\n var $tds = $tr.children();\n var $currentTd = $tds.get(tdIndex);\n // 删除\n $currentTd.remove();\n });\n },\n\n // 删除表格\n _delTable: function _delTable() {\n var editor = this.editor;\n var $selectionELem = editor.selection.getSelectionContainerElem();\n if (!$selectionELem) {\n return;\n }\n var $table = $selectionELem.parentUntil('table');\n if (!$table) {\n return;\n }\n $table.remove();\n },\n\n // 试图改变 active 状态\n tryChangeActive: function tryChangeActive(e) {\n var editor = this.editor;\n var $elem = this.$elem;\n var $selectionELem = editor.selection.getSelectionContainerElem();\n if (!$selectionELem) {\n return;\n }\n var nodeName = $selectionELem.getNodeName();\n if (nodeName === 'TD' || nodeName === 'TH') {\n this._active = true;\n $elem.addClass('w-e-active');\n } else {\n this._active = false;\n $elem.removeClass('w-e-active');\n }\n }\n};\n\n/*\n menu - video\n*/\n// 构造函数\nfunction Video(editor) {\n this.editor = editor;\n this.$elem = $(' ');\n this.type = 'panel';\n\n // 当前是否 active 状态\n this._active = false;\n}\n\n// 原型\nVideo.prototype = {\n constructor: Video,\n\n onClick: function onClick() {\n this._createPanel();\n },\n\n _createPanel: function _createPanel() {\n var _this = this;\n\n // 创建 id\n var textValId = getRandom('text-val');\n var btnId = getRandom('btn');\n\n // 创建 panel\n var panel = new Panel(this, {\n width: 350,\n // 一个 panel 多个 tab\n tabs: [{\n // 标题\n title: '插入视频',\n // 模板\n tpl: '\\n \"/>\\n ',\n // 事件绑定\n events: [{\n selector: '#' + btnId,\n type: 'click',\n fn: function fn() {\n var $text = $('#' + textValId);\n var val = $text.val().trim();\n\n // 测试用视频地址\n // \n\n if (val) {\n // 插入视频\n _this._insert(val);\n }\n\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true;\n }\n }]\n } // first tab end\n ] // tabs end\n }); // panel end\n\n // 显示 panel\n panel.show();\n\n // 记录属性\n this.panel = panel;\n },\n\n // 插入视频\n _insert: function _insert(val) {\n var editor = this.editor;\n editor.cmd.do('insertHTML', val + ' \\n
');\n }\n};\n\n/*\n menu - img\n*/\n// 构造函数\nfunction Image(editor) {\n this.editor = editor;\n this.$elem = $(' ');\n this.type = 'panel';\n\n // 当前是否 active 状态\n this._active = false;\n}\n\n// 原型\nImage.prototype = {\n constructor: Image,\n\n onClick: function onClick() {\n if (this._active) {\n this._createEditPanel();\n } else {\n this._createInsertPanel();\n }\n },\n\n _createEditPanel: function _createEditPanel() {\n var editor = this.editor;\n\n // id\n var width30 = getRandom('width-30');\n var width50 = getRandom('width-50');\n var width100 = getRandom('width-100');\n var delBtn = getRandom('del-btn');\n\n // tab 配置\n var tabsConfig = [{\n title: '编辑图片',\n tpl: '\\n \\n \\n \\n \\n \\n ',\n events: [{\n // 触发选择图片\n selector: '#' + upTriggerId,\n type: 'click',\n fn: function fn() {\n var $file = $('#' + upFileId);\n var fileElem = $file[0];\n if (fileElem) {\n fileElem.click();\n } else {\n // 返回 true 可关闭 panel\n return true;\n }\n }\n }, {\n // 选择图片完毕\n selector: '#' + upFileId,\n type: 'change',\n fn: function fn() {\n var $file = $('#' + upFileId);\n var fileElem = $file[0];\n if (!fileElem) {\n // 返回 true 可关闭 panel\n return true;\n }\n\n // 获取选中的 file 对象列表\n var fileList = fileElem.files;\n if (fileList.length) {\n uploadImg.uploadImg(fileList);\n }\n\n // 返回 true 可关闭 panel\n return true;\n }\n }]\n }, // first tab end\n {\n title: '网络图片',\n tpl: '\\n \\n ',\n events: [{\n selector: '#' + linkBtnId,\n type: 'click',\n fn: function fn() {\n var $linkUrl = $('#' + linkUrlId);\n var url = $linkUrl.val().trim();\n\n if (url) {\n uploadImg.insertLinkImg(url);\n }\n\n // 返回 true 表示函数执行结束之后关闭 panel\n return true;\n }\n }]\n } // second tab end\n ]; // tabs end\n\n // 判断 tabs 的显示\n var tabsConfigResult = [];\n if ((config.uploadImgShowBase64 || config.uploadImgServer) && window.FileReader) {\n // 显示“上传图片”\n tabsConfigResult.push(tabsConfig[0]);\n }\n if (config.showLinkImg) {\n // 显示“网络图片”\n tabsConfigResult.push(tabsConfig[1]);\n }\n\n // 创建 panel 并显示\n var panel = new Panel(this, {\n width: 300,\n tabs: tabsConfigResult\n });\n panel.show();\n\n // 记录属性\n this.panel = panel;\n },\n\n // 试图改变 active 状态\n tryChangeActive: function tryChangeActive(e) {\n var editor = this.editor;\n var $elem = this.$elem;\n if (editor._selectedImg) {\n this._active = true;\n $elem.addClass('w-e-active');\n } else {\n this._active = false;\n $elem.removeClass('w-e-active');\n }\n }\n};\n\n/*\n 所有菜单的汇总\n*/\n\n// 存储菜单的构造函数\nvar MenuConstructors = {};\n\nMenuConstructors.bold = Bold;\n\nMenuConstructors.head = Head;\n\nMenuConstructors.link = Link;\n\nMenuConstructors.italic = Italic;\n\nMenuConstructors.redo = Redo;\n\nMenuConstructors.strikeThrough = StrikeThrough;\n\nMenuConstructors.underline = Underline;\n\nMenuConstructors.undo = Undo;\n\nMenuConstructors.list = List;\n\nMenuConstructors.justify = Justify;\n\nMenuConstructors.foreColor = BackColor;\n\nMenuConstructors.backColor = ForeColor$1;\n\nMenuConstructors.quote = Quote;\n\nMenuConstructors.code = Code;\n\nMenuConstructors.emoticon = Emoticon;\n\nMenuConstructors.table = Table;\n\nMenuConstructors.video = Video;\n\nMenuConstructors.image = Image;\n\n/*\n 菜单集合\n*/\n// 构造函数\nfunction Menus(editor) {\n this.editor = editor;\n this.menus = {};\n}\n\n// 修改原型\nMenus.prototype = {\n constructor: Menus,\n\n // 初始化菜单\n init: function init() {\n var _this = this;\n\n var editor = this.editor;\n var config = editor.config || {};\n var configMenus = config.menus || []; // 获取配置中的菜单\n\n // 根据配置信息,创建菜单\n configMenus.forEach(function (menuKey) {\n var MenuConstructor = MenuConstructors[menuKey];\n if (MenuConstructor && typeof MenuConstructor === 'function') {\n // 创建单个菜单\n _this.menus[menuKey] = new MenuConstructor(editor);\n }\n });\n\n // 添加到菜单栏\n this._addToToolbar();\n\n // 绑定事件\n this._bindEvent();\n },\n\n // 添加到菜单栏\n _addToToolbar: function _addToToolbar() {\n var editor = this.editor;\n var $toolbarElem = editor.$toolbarElem;\n var menus = this.menus;\n objForEach(menus, function (key, menu) {\n var $elem = menu.$elem;\n if ($elem) {\n $toolbarElem.append($elem);\n }\n });\n },\n\n // 绑定菜单 click mouseenter 事件\n _bindEvent: function _bindEvent() {\n var menus = this.menus;\n var editor = this.editor;\n objForEach(menus, function (key, menu) {\n var type = menu.type;\n if (!type) {\n return;\n }\n var $elem = menu.$elem;\n var droplist = menu.droplist;\n var panel = menu.panel;\n\n // 点击类型,例如 bold\n if (type === 'click' && menu.onClick) {\n $elem.on('click', function (e) {\n if (editor.selection.getRange() == null) {\n return;\n }\n menu.onClick(e);\n });\n }\n\n // 下拉框,例如 head\n if (type === 'droplist' && droplist) {\n $elem.on('mouseenter', function (e) {\n if (editor.selection.getRange() == null) {\n return;\n }\n // 显示\n droplist.showTimeoutId = setTimeout(function () {\n droplist.show();\n }, 200);\n }).on('mouseleave', function (e) {\n // 隐藏\n droplist.hideTimeoutId = setTimeout(function () {\n droplist.hide();\n }, 0);\n });\n }\n\n // 弹框类型,例如 link\n if (type === 'panel' && menu.onClick) {\n $elem.on('click', function (e) {\n e.stopPropagation();\n if (editor.selection.getRange() == null) {\n return;\n }\n // 在自定义事件中显示 panel\n menu.onClick(e);\n });\n }\n });\n },\n\n // 尝试修改菜单状态\n changeActive: function changeActive() {\n var menus = this.menus;\n objForEach(menus, function (key, menu) {\n if (menu.tryChangeActive) {\n setTimeout(function () {\n menu.tryChangeActive();\n }, 100);\n }\n });\n }\n};\n\n/*\n 粘贴信息的处理\n*/\n\n// 获取粘贴的纯文本\nfunction getPasteText(e) {\n var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData;\n var pasteText = void 0;\n if (clipboardData == null) {\n pasteText = window.clipboardData && window.clipboardData.getData('text');\n } else {\n pasteText = clipboardData.getData('text/plain');\n }\n\n return replaceHtmlSymbol(pasteText);\n}\n\n// 获取粘贴的html\nfunction getPasteHtml(e) {\n var clipboardData = e.clipboardData || e.originalEvent && e.originalEvent.clipboardData;\n var pasteText = void 0,\n pasteHtml = void 0;\n if (clipboardData == null) {\n pasteText = window.clipboardData && window.clipboardData.getData('text');\n } else {\n pasteText = clipboardData.getData('text/plain');\n pasteHtml = clipboardData.getData('text/html');\n }\n if (!pasteHtml && pasteText) {\n pasteHtml = ' \\n ' + replaceHtmlSymbol(pasteText) + '
';\n }\n if (!pasteHtml) {\n return;\n }\n\n // 过滤word中状态过来的无用字符\n var docSplitHtml = pasteHtml.split(' \\n ',\n events: [{\n selector: '#' + width30,\n type: 'click',\n fn: function fn() {\n var $img = editor._selectedImg;\n if ($img) {\n $img.css('max-width', '30%');\n }\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true;\n }\n }, {\n selector: '#' + width50,\n type: 'click',\n fn: function fn() {\n var $img = editor._selectedImg;\n if ($img) {\n $img.css('max-width', '50%');\n }\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true;\n }\n }, {\n selector: '#' + width100,\n type: 'click',\n fn: function fn() {\n var $img = editor._selectedImg;\n if ($img) {\n $img.css('max-width', '100%');\n }\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true;\n }\n }, {\n selector: '#' + delBtn,\n type: 'click',\n fn: function fn() {\n var $img = editor._selectedImg;\n if ($img) {\n $img.remove();\n }\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true;\n }\n }]\n }];\n\n // 创建 panel 并显示\n var panel = new Panel(this, {\n width: 300,\n tabs: tabsConfig\n });\n panel.show();\n\n // 记录属性\n this.panel = panel;\n },\n\n _createInsertPanel: function _createInsertPanel() {\n var editor = this.editor;\n var uploadImg = editor.uploadImg;\n var config = editor.config;\n\n // id\n var upTriggerId = getRandom('up-trigger');\n var upFileId = getRandom('up-file');\n var linkUrlId = getRandom('link-url');\n var linkBtnId = getRandom('link-btn');\n\n // tabs 的配置\n var tabsConfig = [{\n title: '上传图片',\n tpl: ' \\n ',\n // 事件绑定\n events: [{\n // 增加行\n selector: '#' + addRowBtnId,\n type: 'click',\n fn: function fn() {\n _this2._addRow();\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true;\n }\n }, {\n // 增加列\n selector: '#' + addColBtnId,\n type: 'click',\n fn: function fn() {\n _this2._addCol();\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true;\n }\n }, {\n // 删除行\n selector: '#' + delRowBtnId,\n type: 'click',\n fn: function fn() {\n _this2._delRow();\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true;\n }\n }, {\n // 删除列\n selector: '#' + delColBtnId,\n type: 'click',\n fn: function fn() {\n _this2._delCol();\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true;\n }\n }, {\n // 删除表格\n selector: '#' + delTableBtnId,\n type: 'click',\n fn: function fn() {\n _this2._delTable();\n // 返回 true,表示该事件执行完之后,panel 要关闭。否则 panel 不会关闭\n return true;\n }\n }]\n }]\n });\n // 显示 panel\n panel.show();\n },\n\n // 获取选中的单元格的位置信息\n _getLocationData: function _getLocationData() {\n var result = {};\n var editor = this.editor;\n var $selectionELem = editor.selection.getSelectionContainerElem();\n if (!$selectionELem) {\n return;\n }\n var nodeName = $selectionELem.getNodeName();\n if (nodeName !== 'TD' && nodeName !== 'TH') {\n return;\n }\n\n // 获取 td index\n var $tr = $selectionELem.parent();\n var $tds = $tr.children();\n var tdLength = $tds.length;\n $tds.forEach(function (td, index) {\n if (td === $selectionELem[0]) {\n // 记录并跳出循环\n result.td = {\n index: index,\n elem: td,\n length: tdLength\n };\n return false;\n }\n });\n\n // 获取 tr index\n var $tbody = $tr.parent();\n var $trs = $tbody.children();\n var trLength = $trs.length;\n $trs.forEach(function (tr, index) {\n if (tr === $tr[0]) {\n // 记录并跳出循环\n result.tr = {\n index: index,\n elem: tr,\n length: trLength\n };\n return false;\n }\n });\n\n // 返回结果\n return result;\n },\n\n // 增加行\n _addRow: function _addRow() {\n // 获取当前单元格的位置信息\n var locationData = this._getLocationData();\n if (!locationData) {\n return;\n }\n var trData = locationData.tr;\n var $currentTr = $(trData.elem);\n var tdData = locationData.td;\n var tdLength = tdData.length;\n\n // 拼接即将插入的字符串\n var newTr = document.createElement('tr');\n var tpl = '',\n i = void 0;\n for (i = 0; i < tdLength; i++) {\n tpl += ' \\n
');\n this.type = 'panel';\n\n // 当前是否 active 状态\n this._active = false;\n}\n\n// 原型\nCode.prototype = {\n constructor: Code,\n\n onClick: function onClick(e) {\n var editor = this.editor;\n var $startElem = editor.selection.getSelectionStartElem();\n var $endElem = editor.selection.getSelectionEndElem();\n var isSeleEmpty = editor.selection.isSelectionEmpty();\n var selectionText = editor.selection.getSelectionText();\n var $code = void 0;\n\n if (!$startElem.equal($endElem)) {\n // 跨元素选择,不做处理\n editor.selection.restoreSelection();\n return;\n }\n if (!isSeleEmpty) {\n // 选取不是空,用