/**
* 分页功能插件
* @file
* @since 1.2.6.1
*/
UE.plugins["pagebreak"] = function() {
var me = this,
notBreakTags = ["td"];
me.setOpt("pageBreakTag", "_ueditor_page_break_tag_");
function fillNode(node) {
if (domUtils.isEmptyBlock(node)) {
var firstChild = node.firstChild,
tmpNode;
while (
firstChild &&
firstChild.nodeType == 1 &&
domUtils.isEmptyBlock(firstChild)
) {
tmpNode = firstChild;
firstChild = firstChild.firstChild;
}
!tmpNode && (tmpNode = node);
domUtils.fillNode(me.document, tmpNode);
}
}
//分页符样式添加
me.ready(function() {
utils.cssRule(
"pagebreak",
".pagebreak{display:block;clear:both !important;cursor:default !important;width: 100% !important;margin:0;}",
me.document
);
});
function isHr(node) {
return (
node &&
node.nodeType == 1 &&
node.tagName == "HR" &&
node.className == "pagebreak"
);
}
me.addInputRule(function(root) {
root.traversal(function(node) {
if (node.type == "text" && node.data == me.options.pageBreakTag) {
var hr = UE.uNode.createElement(
'
'
);
node.parentNode.insertBefore(hr, node);
node.parentNode.removeChild(node);
}
});
});
me.addOutputRule(function(node) {
utils.each(node.getNodesByTagName("hr"), function(n) {
if (n.getAttr("class") == "pagebreak") {
var txt = UE.uNode.createText(me.options.pageBreakTag);
n.parentNode.insertBefore(txt, n);
n.parentNode.removeChild(n);
}
});
});
/**
* 插入分页符
* @command pagebreak
* @method execCommand
* @param { String } cmd 命令字符串
* @remind 在表格中插入分页符会把表格切分成两部分
* @remind 获取编辑器内的数据时, 编辑器会把分页符转换成“_ueditor_page_break_tag_”字符串,
* 以便于提交数据到服务器端后处理分页。
* @example
* ```javascript
* editor.execCommand( 'pagebreak'); //插入一个hr标签,带有样式类名pagebreak
* ```
*/
me.commands["pagebreak"] = {
execCommand: function() {
var range = me.selection.getRange(),
hr = me.document.createElement("hr");
domUtils.setAttributes(hr, {
class: "pagebreak",
noshade: "noshade",
size: "5"
});
domUtils.unSelectable(hr);
//table单独处理
var node = domUtils.findParentByTagName(
range.startContainer,
notBreakTags,
true
),
parents = [],
pN;
if (node) {
switch (node.tagName) {
case "TD":
pN = node.parentNode;
if (!pN.previousSibling) {
var table = domUtils.findParentByTagName(pN, "table");
// var tableWrapDiv = table.parentNode;
// if(tableWrapDiv && tableWrapDiv.nodeType == 1
// && tableWrapDiv.tagName == 'DIV'
// && tableWrapDiv.getAttribute('dropdrag')
// ){
// domUtils.remove(tableWrapDiv,true);
// }
table.parentNode.insertBefore(hr, table);
parents = domUtils.findParents(hr, true);
} else {
pN.parentNode.insertBefore(hr, pN);
parents = domUtils.findParents(hr);
}
pN = parents[1];
if (hr !== pN) {
domUtils.breakParent(hr, pN);
}
//table要重写绑定一下拖拽
me.fireEvent("afteradjusttable", me.document);
}
} else {
if (!range.collapsed) {
range.deleteContents();
var start = range.startContainer;
while (
!domUtils.isBody(start) &&
domUtils.isBlockElm(start) &&
domUtils.isEmptyNode(start)
) {
range.setStartBefore(start).collapse(true);
domUtils.remove(start);
start = range.startContainer;
}
}
range.insertNode(hr);
var pN = hr.parentNode,
nextNode;
while (!domUtils.isBody(pN)) {
domUtils.breakParent(hr, pN);
nextNode = hr.nextSibling;
if (nextNode && domUtils.isEmptyBlock(nextNode)) {
domUtils.remove(nextNode);
}
pN = hr.parentNode;
}
nextNode = hr.nextSibling;
var pre = hr.previousSibling;
if (isHr(pre)) {
domUtils.remove(pre);
} else {
pre && fillNode(pre);
}
if (!nextNode) {
var p = me.document.createElement("p");
hr.parentNode.appendChild(p);
domUtils.fillNode(me.document, p);
range.setStart(p, 0).collapse(true);
} else {
if (isHr(nextNode)) {
domUtils.remove(nextNode);
} else {
fillNode(nextNode);
}
range.setEndAfter(hr).collapse(false);
}
range.select(true);
}
}
};
};