File: /www/wwwroot/bs.kntsleep.com/system/extend/ueditor/_src/plugins/paragraph.js
/**
* 段落样式
* @file
* @since 1.2.6.1
*/
/**
* 段落格式
* @command paragraph
* @method execCommand
* @param { String } cmd 命令字符串
* @param {String} style 标签值为:'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'
* @param {Object} attrs 标签的属性
* @example
* ```javascript
* editor.execCommand( 'Paragraph','h1','{
* class:'test'
* }' );
* ```
*/
/**
* 返回选区内节点标签名
* @command paragraph
* @method queryCommandValue
* @param { String } cmd 命令字符串
* @return { String } 节点标签名
* @example
* ```javascript
* editor.queryCommandValue( 'Paragraph' );
* ```
*/
UE.plugins["paragraph"] = function() {
var me = this,
block = domUtils.isBlockElm,
notExchange = ["TD", "LI", "PRE"],
doParagraph = function(range, style, attrs, sourceCmdName) {
var bookmark = range.createBookmark(),
filterFn = function(node) {
return node.nodeType == 1
? node.tagName.toLowerCase() != "br" &&
!domUtils.isBookmarkNode(node)
: !domUtils.isWhitespace(node);
},
para;
range.enlarge(true);
var bookmark2 = range.createBookmark(),
current = domUtils.getNextDomNode(bookmark2.start, false, filterFn),
tmpRange = range.cloneRange(),
tmpNode;
while (
current &&
!(
domUtils.getPosition(current, bookmark2.end) &
domUtils.POSITION_FOLLOWING
)
) {
if (current.nodeType == 3 || !block(current)) {
tmpRange.setStartBefore(current);
while (current && current !== bookmark2.end && !block(current)) {
tmpNode = current;
current = domUtils.getNextDomNode(current, false, null, function(
node
) {
return !block(node);
});
}
tmpRange.setEndAfter(tmpNode);
para = range.document.createElement(style);
if (attrs) {
domUtils.setAttributes(para, attrs);
if (
sourceCmdName &&
sourceCmdName == "customstyle" &&
attrs.style
) {
para.style.cssText = attrs.style;
}
}
para.appendChild(tmpRange.extractContents());
//需要内容占位
if (domUtils.isEmptyNode(para)) {
domUtils.fillChar(range.document, para);
}
tmpRange.insertNode(para);
var parent = para.parentNode;
//如果para上一级是一个block元素且不是body,td就删除它
if (
block(parent) &&
!domUtils.isBody(para.parentNode) &&
utils.indexOf(notExchange, parent.tagName) == -1
) {
//存储dir,style
if (!(sourceCmdName && sourceCmdName == "customstyle")) {
parent.getAttribute("dir") &&
para.setAttribute("dir", parent.getAttribute("dir"));
//trace:1070
parent.style.cssText &&
(para.style.cssText =
parent.style.cssText + ";" + para.style.cssText);
//trace:1030
parent.style.textAlign &&
!para.style.textAlign &&
(para.style.textAlign = parent.style.textAlign);
parent.style.textIndent &&
!para.style.textIndent &&
(para.style.textIndent = parent.style.textIndent);
parent.style.padding &&
!para.style.padding &&
(para.style.padding = parent.style.padding);
}
//trace:1706 选择的就是h1-6要删除
if (
attrs &&
/h\d/i.test(parent.tagName) &&
!/h\d/i.test(para.tagName)
) {
domUtils.setAttributes(parent, attrs);
if (
sourceCmdName &&
sourceCmdName == "customstyle" &&
attrs.style
) {
parent.style.cssText = attrs.style;
}
domUtils.remove(para.parentNode, true);
para = parent;
} else {
domUtils.remove(para.parentNode, true);
}
}
if (utils.indexOf(notExchange, parent.tagName) != -1) {
current = parent;
} else {
current = para;
}
current = domUtils.getNextDomNode(current, false, filterFn);
} else {
current = domUtils.getNextDomNode(current, true, filterFn);
}
}
return range.moveToBookmark(bookmark2).moveToBookmark(bookmark);
};
me.setOpt("paragraph", {
p: "",
h1: "",
h2: "",
h3: "",
h4: "",
h5: "",
h6: ""
});
me.commands["paragraph"] = {
execCommand: function(cmdName, style, attrs, sourceCmdName) {
var range = this.selection.getRange();
//闭合时单独处理
if (range.collapsed) {
var txt = this.document.createTextNode("p");
range.insertNode(txt);
//去掉冗余的fillchar
if (browser.ie) {
var node = txt.previousSibling;
if (node && domUtils.isWhitespace(node)) {
domUtils.remove(node);
}
node = txt.nextSibling;
if (node && domUtils.isWhitespace(node)) {
domUtils.remove(node);
}
}
}
range = doParagraph(range, style, attrs, sourceCmdName);
if (txt) {
range.setStartBefore(txt).collapse(true);
pN = txt.parentNode;
domUtils.remove(txt);
if (domUtils.isBlockElm(pN) && domUtils.isEmptyNode(pN)) {
domUtils.fillNode(this.document, pN);
}
}
if (
browser.gecko &&
range.collapsed &&
range.startContainer.nodeType == 1
) {
var child = range.startContainer.childNodes[range.startOffset];
if (
child &&
child.nodeType == 1 &&
child.tagName.toLowerCase() == style
) {
range.setStart(child, 0).collapse(true);
}
}
//trace:1097 原来有true,原因忘了,但去了就不能清除多余的占位符了
range.select();
return true;
},
queryCommandValue: function() {
var node = domUtils.filterNodeList(
this.selection.getStartElementPath(),
"p h1 h2 h3 h4 h5 h6"
);
return node ? node.tagName.toLowerCase() : "";
}
};
};