/** * 添加引用 * @file * @since 1.2.6.1 */ /** * 添加引用 * @command blockquote * @method execCommand * @param { String } cmd 命令字符串 * @example * ```javascript * editor.execCommand( 'blockquote' ); * ``` */ /** * 添加引用 * @command blockquote * @method execCommand * @param { String } cmd 命令字符串 * @param { Object } attrs 节点属性 * @example * ```javascript * editor.execCommand( 'blockquote',{ * style: "color: red;" * } ); * ``` */ UE.plugins["blockquote"] = function() { var me = this; function getObj(editor) { return domUtils.filterNodeList( editor.selection.getStartElementPath(), "blockquote" ); } me.commands["blockquote"] = { execCommand: function(cmdName, attrs) { var range = this.selection.getRange(), obj = getObj(this), blockquote = dtd.blockquote, bookmark = range.createBookmark(); if (obj) { var start = range.startContainer, startBlock = domUtils.isBlockElm(start) ? start : domUtils.findParent(start, function(node) { return domUtils.isBlockElm(node); }), end = range.endContainer, endBlock = domUtils.isBlockElm(end) ? end : domUtils.findParent(end, function(node) { return domUtils.isBlockElm(node); }); //处理一下li startBlock = domUtils.findParentByTagName(startBlock, "li", true) || startBlock; endBlock = domUtils.findParentByTagName(endBlock, "li", true) || endBlock; if ( startBlock.tagName == "LI" || startBlock.tagName == "TD" || startBlock === obj || domUtils.isBody(startBlock) ) { domUtils.remove(obj, true); } else { domUtils.breakParent(startBlock, obj); } if (startBlock !== endBlock) { obj = domUtils.findParentByTagName(endBlock, "blockquote"); if (obj) { if ( endBlock.tagName == "LI" || endBlock.tagName == "TD" || domUtils.isBody(endBlock) ) { obj.parentNode && domUtils.remove(obj, true); } else { domUtils.breakParent(endBlock, obj); } } } var blockquotes = domUtils.getElementsByTagName( this.document, "blockquote" ); for (var i = 0, bi; (bi = blockquotes[i++]); ) { if (!bi.childNodes.length) { domUtils.remove(bi); } else if ( domUtils.getPosition(bi, startBlock) & domUtils.POSITION_FOLLOWING && domUtils.getPosition(bi, endBlock) & domUtils.POSITION_PRECEDING ) { domUtils.remove(bi, true); } } } else { var tmpRange = range.cloneRange(), node = tmpRange.startContainer.nodeType == 1 ? tmpRange.startContainer : tmpRange.startContainer.parentNode, preNode = node, doEnd = 1; //调整开始 while (1) { if (domUtils.isBody(node)) { if (preNode !== node) { if (range.collapsed) { tmpRange.selectNode(preNode); doEnd = 0; } else { tmpRange.setStartBefore(preNode); } } else { tmpRange.setStart(node, 0); } break; } if (!blockquote[node.tagName]) { if (range.collapsed) { tmpRange.selectNode(preNode); } else { tmpRange.setStartBefore(preNode); } break; } preNode = node; node = node.parentNode; } //调整结束 if (doEnd) { preNode = node = node = tmpRange.endContainer.nodeType == 1 ? tmpRange.endContainer : tmpRange.endContainer.parentNode; while (1) { if (domUtils.isBody(node)) { if (preNode !== node) { tmpRange.setEndAfter(preNode); } else { tmpRange.setEnd(node, node.childNodes.length); } break; } if (!blockquote[node.tagName]) { tmpRange.setEndAfter(preNode); break; } preNode = node; node = node.parentNode; } } node = range.document.createElement("blockquote"); domUtils.setAttributes(node, attrs); node.appendChild(tmpRange.extractContents()); tmpRange.insertNode(node); //去除重复的 var childs = domUtils.getElementsByTagName(node, "blockquote"); for (var i = 0, ci; (ci = childs[i++]); ) { if (ci.parentNode) { domUtils.remove(ci, true); } } } range.moveToBookmark(bookmark).select(); }, queryCommandState: function() { return getObj(this) ? 1 : 0; } }; };