/** * 子标题功能插件 * @file * @since 1.2.6.1 */ UE.plugins['subtitle'] = function () { var me = this, notBreakTags = ['td']; domUtils = UE.dom.domUtils; 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('subtitle','.subtitle{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 == 'subtitle'; } me.addInputRule(function(root){ root.traversal(function(node){ if(node.type == 'text'){ var re=/\[page\](.+)\[\/page\]/; subtitle = node.data.match(re); if (subtitle) { 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') == 'subtitle'){ var txt = UE.uNode.createText('[page]'+n.getAttr('subtitle')+'[/page]'); n.parentNode.insertBefore(txt,n); n.parentNode.removeChild(n); } }) }); /** * 插入子标题 * @command subtitle * @method execCommand * @param { String } cmd 命令字符串 * @remind 在表格中插入分页符会把表格切分成两部分 * @remind 获取编辑器内的数据时, 编辑器会把分页符转换成“_ueditor_page_break_tag_”字符串, * 以便于提交数据到服务器端后处理分页。 * @example * ```javascript * editor.execCommand( 'subtitle'); //插入一个hr标签,带有样式类名pagebreak * ``` */ me.commands['subtitle'] = { execCommand:function (cmd, name) { var range = me.selection.getRange(),hr = me.document.createElement('hr'); domUtils.setAttributes(hr,{ 'subtitle' : name, 'class' : 'subtitle', noshade:"noshade", size:"8", title: name , 'unselectable' : 'on', 'style' : 'moz-user-select:none;-khtml-user-select: none;' }); 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"); } } }; };