File: /www/wwwroot/bs.kntsleep.com/system/extend/ueditor/_src/plugins/enterkey.js
///import core
///import plugins/undo.js
///commands 设置回车标签p或br
///commandsName EnterKey
///commandsTitle 设置回车标签p或br
/**
* @description 处理回车
* @author zhanyi
*/
UE.plugins["enterkey"] = function() {
var hTag,
me = this,
tag = me.options.enterTag;
me.addListener("keyup", function(type, evt) {
var keyCode = evt.keyCode || evt.which;
if (keyCode == 13) {
var range = me.selection.getRange(),
start = range.startContainer,
doSave;
//修正在h1-h6里边回车后不能嵌套p的问题
if (!browser.ie) {
if (/h\d/i.test(hTag)) {
if (browser.gecko) {
var h = domUtils.findParentByTagName(
start,
[
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"blockquote",
"caption",
"table"
],
true
);
if (!h) {
me.document.execCommand("formatBlock", false, "<p>");
doSave = 1;
}
} else {
//chrome remove div
if (start.nodeType == 1) {
var tmp = me.document.createTextNode(""),
div;
range.insertNode(tmp);
div = domUtils.findParentByTagName(tmp, "div", true);
if (div) {
var p = me.document.createElement("p");
while (div.firstChild) {
p.appendChild(div.firstChild);
}
div.parentNode.insertBefore(p, div);
domUtils.remove(div);
range.setStartBefore(tmp).setCursor();
doSave = 1;
}
domUtils.remove(tmp);
}
}
if (me.undoManger && doSave) {
me.undoManger.save();
}
}
//没有站位符,会出现多行的问题
browser.opera && range.select();
} else {
me.fireEvent("saveScene", true, true);
}
}
});
me.addListener("keydown", function(type, evt) {
var keyCode = evt.keyCode || evt.which;
if (keyCode == 13) {
//回车
if (me.fireEvent("beforeenterkeydown")) {
domUtils.preventDefault(evt);
return;
}
me.fireEvent("saveScene", true, true);
hTag = "";
var range = me.selection.getRange();
if (!range.collapsed) {
//跨td不能删
var start = range.startContainer,
end = range.endContainer,
startTd = domUtils.findParentByTagName(start, "td", true),
endTd = domUtils.findParentByTagName(end, "td", true);
if (
(startTd && endTd && startTd !== endTd) ||
(!startTd && endTd) ||
(startTd && !endTd)
) {
evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false);
return;
}
}
if (tag == "p") {
if (!browser.ie) {
start = domUtils.findParentByTagName(
range.startContainer,
[
"ol",
"ul",
"p",
"h1",
"h2",
"h3",
"h4",
"h5",
"h6",
"blockquote",
"caption"
],
true
);
//opera下执行formatblock会在table的场景下有问题,回车在opera原生支持很好,所以暂时在opera去掉调用这个原生的command
//trace:2431
if (!start && !browser.opera) {
me.document.execCommand("formatBlock", false, "<p>");
if (browser.gecko) {
range = me.selection.getRange();
start = domUtils.findParentByTagName(
range.startContainer,
"p",
true
);
start && domUtils.removeDirtyAttr(start);
}
} else {
hTag = start.tagName;
start.tagName.toLowerCase() == "p" &&
browser.gecko &&
domUtils.removeDirtyAttr(start);
}
}
} else {
evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false);
if (!range.collapsed) {
range.deleteContents();
start = range.startContainer;
if (
start.nodeType == 1 &&
(start = start.childNodes[range.startOffset])
) {
while (start.nodeType == 1) {
if (dtd.$empty[start.tagName]) {
range.setStartBefore(start).setCursor();
if (me.undoManger) {
me.undoManger.save();
}
return false;
}
if (!start.firstChild) {
var br = range.document.createElement("br");
start.appendChild(br);
range.setStart(start, 0).setCursor();
if (me.undoManger) {
me.undoManger.save();
}
return false;
}
start = start.firstChild;
}
if (start === range.startContainer.childNodes[range.startOffset]) {
br = range.document.createElement("br");
range.insertNode(br).setCursor();
} else {
range.setStart(start, 0).setCursor();
}
} else {
br = range.document.createElement("br");
range.insertNode(br).setStartAfter(br).setCursor();
}
} else {
br = range.document.createElement("br");
range.insertNode(br);
var parent = br.parentNode;
if (parent.lastChild === br) {
br.parentNode.insertBefore(br.cloneNode(true), br);
range.setStartBefore(br);
} else {
range.setStartAfter(br);
}
range.setCursor();
}
}
}
});
};