123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188 |
- /**
- * 添加引用
- * @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;
- }
- };
- };
|