123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177 |
- /**
- * 分页功能插件
- * @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(
- '<hr class="pagebreak" noshade="noshade" size="5" style="-webkit-user-select: none;">'
- );
- 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);
- }
- }
- };
- };
|