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