123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- ///import core
- ///commands 格式
- ///commandsName Paragraph
- ///commandsTitle 段落格式
- /**
- * 段落样式
- * @function
- * @name baidu.editor.execCommand
- * @param {String} cmdName paragraph插入段落执行命令
- * @param {String} style 标签值为:'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'
- * @param {String} attrs 标签的属性
- * @author zhanyi
- */
- 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,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() : '';
- }
- };
- };
|