/**
* 分页功能插件
* @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);
}
if($('#paginationtype').val()) {
$('#paginationtype').val(2);
$('#paginationtype').css("color","red");
}
}
};
};