123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- /**
- * 子标题功能插件
- * @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('<hr class="subtitle" subtitle="'+subtitle[1]+'" noshade="noshade" size="8" title="'+subtitle[1]+'" unselectable="on" style="moz-user-select:none;-khtml-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') == '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");
- }
- }
- };
- };
|