/** * 分页功能插件 * @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); } } }; };