| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 | /** * 段落样式 * @file * @since 1.2.6.1 *//** * 段落格式 * @command paragraph * @method execCommand * @param { String } cmd 命令字符串 * @param {String}   style               标签值为:'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6' * @param {Object}   attrs               标签的属性 * @example * ```javascript * editor.execCommand( 'Paragraph','h1','{ *     class:'test' * }' ); * ``` *//** * 返回选区内节点标签名 * @command paragraph * @method queryCommandValue * @param { String } cmd 命令字符串 * @return { String } 节点标签名 * @example * ```javascript * editor.queryCommandValue( 'Paragraph' ); * ``` */UE.plugins['paragraph'] = function() {    var me = this,        block = domUtils.isBlockElm,        notExchange = ['TD','LI','PRE'],        doParagraph = function(range,style,attrs,sourceCmdName){            var bookmark = range.createBookmark(),                filterFn = function( node ) {                    return   node.nodeType == 1 ? node.tagName.toLowerCase() != 'br' &&  !domUtils.isBookmarkNode(node) : !domUtils.isWhitespace( node );                },                para;            range.enlarge( true );            var bookmark2 = range.createBookmark(),                current = domUtils.getNextDomNode( bookmark2.start, false, filterFn ),                tmpRange = range.cloneRange(),                tmpNode;            while ( current && !(domUtils.getPosition( current, bookmark2.end ) & domUtils.POSITION_FOLLOWING) ) {                if ( current.nodeType == 3 || !block( current ) ) {                    tmpRange.setStartBefore( current );                    while ( current && current !== bookmark2.end && !block( current ) ) {                        tmpNode = current;                        current = domUtils.getNextDomNode( current, false, null, function( node ) {                            return !block( node );                        } );                    }                    tmpRange.setEndAfter( tmpNode );                                        para = range.document.createElement( style );                    if(attrs){                        domUtils.setAttributes(para,attrs);                        if(sourceCmdName && sourceCmdName == 'customstyle' && attrs.style){                            para.style.cssText = attrs.style;                        }                    }                    para.appendChild( tmpRange.extractContents() );                    //需要内容占位                    if(domUtils.isEmptyNode(para)){                        domUtils.fillChar(range.document,para);                                            }                    tmpRange.insertNode( para );                    var parent = para.parentNode;                    //如果para上一级是一个block元素且不是body,td就删除它                    if ( block( parent ) && !domUtils.isBody( para.parentNode ) && utils.indexOf(notExchange,parent.tagName)==-1) {                        //存储dir,style                        if(!(sourceCmdName && sourceCmdName == 'customstyle')){                            parent.getAttribute('dir') && para.setAttribute('dir',parent.getAttribute('dir'));                            //trace:1070                            parent.style.cssText && (para.style.cssText = parent.style.cssText + ';' + para.style.cssText);                            //trace:1030                            parent.style.textAlign && !para.style.textAlign && (para.style.textAlign = parent.style.textAlign);                            parent.style.textIndent && !para.style.textIndent && (para.style.textIndent = parent.style.textIndent);                            parent.style.padding && !para.style.padding && (para.style.padding = parent.style.padding);                        }                        //trace:1706 选择的就是h1-6要删除                        if( attrs && /h\d/i.test(parent.tagName) && !/h\d/i.test(para.tagName) ){                            domUtils.setAttributes(parent,attrs);                            if(sourceCmdName && sourceCmdName == 'customstyle' && attrs.style){                                parent.style.cssText = attrs.style;                            }                            domUtils.remove(para.parentNode,true);                            para = parent;                        }else{                            domUtils.remove( para.parentNode, true );                        }                    }                    if(  utils.indexOf(notExchange,parent.tagName)!=-1){                        current = parent;                    }else{                       current = para;                    }                    current = domUtils.getNextDomNode( current, false, filterFn );                } else {                    current = domUtils.getNextDomNode( current, true, filterFn );                }            }            return range.moveToBookmark( bookmark2 ).moveToBookmark( bookmark );        };    me.setOpt('paragraph',{'p':'', 'h1':'', 'h2':'', 'h3':'', 'h4':'', 'h5':'', 'h6':''});    me.commands['paragraph'] = {        execCommand : function( cmdName, style,attrs,sourceCmdName ) {            var range = this.selection.getRange();             //闭合时单独处理            if(range.collapsed){                var txt = this.document.createTextNode('p');                range.insertNode(txt);                //去掉冗余的fillchar                if(browser.ie){                    var node = txt.previousSibling;                    if(node && domUtils.isWhitespace(node)){                        domUtils.remove(node);                    }                    node = txt.nextSibling;                    if(node && domUtils.isWhitespace(node)){                        domUtils.remove(node);                    }                }            }            range = doParagraph(range,style,attrs,sourceCmdName);            if(txt){                range.setStartBefore(txt).collapse(true);                pN = txt.parentNode;                domUtils.remove(txt);                if(domUtils.isBlockElm(pN)&&domUtils.isEmptyNode(pN)){                    domUtils.fillNode(this.document,pN);                }            }            if(browser.gecko && range.collapsed && range.startContainer.nodeType == 1){                var child = range.startContainer.childNodes[range.startOffset];                if(child && child.nodeType == 1 && child.tagName.toLowerCase() == style){                    range.setStart(child,0).collapse(true);                }            }            //trace:1097 原来有true,原因忘了,但去了就不能清除多余的占位符了            range.select();            return true;        },        queryCommandValue : function() {            var node = domUtils.filterNodeList(this.selection.getStartElementPath(),'p h1 h2 h3 h4 h5 h6');            return node ? node.tagName.toLowerCase() : '';        }    };};
 |