| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 | 
							- /**
 
-  * 清除格式
 
-  * @file
 
-  * @since 1.2.6.1
 
-  */
 
- /**
 
-  * 清除文字样式
 
-  * @command removeformat
 
-  * @method execCommand
 
-  * @param { String } cmd 命令字符串
 
-  * @param   {String}   tags     以逗号隔开的标签。如:strong
 
-  * @param   {String}   style    样式如:color
 
-  * @param   {String}   attrs    属性如:width
 
-  * @example
 
-  * ```javascript
 
-  * editor.execCommand( 'removeformat', 'strong','color','width' );
 
-  * ```
 
-  */
 
- UE.plugins['removeformat'] = function(){
 
-     var me = this;
 
-     me.setOpt({
 
-        'removeFormatTags': 'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var',
 
-        'removeFormatAttributes':'class,style,lang,width,height,align,hspace,valign'
 
-     });
 
-     me.commands['removeformat'] = {
 
-         execCommand : function( cmdName, tags, style, attrs,notIncludeA ) {
 
-             var tagReg = new RegExp( '^(?:' + (tags || this.options.removeFormatTags).replace( /,/g, '|' ) + ')$', 'i' ) ,
 
-                 removeFormatAttributes = style ? [] : (attrs || this.options.removeFormatAttributes).split( ',' ),
 
-                 range = new dom.Range( this.document ),
 
-                 bookmark,node,parent,
 
-                 filter = function( node ) {
 
-                     return node.nodeType == 1;
 
-                 };
 
-             function isRedundantSpan (node) {
 
-                 if (node.nodeType == 3 || node.tagName.toLowerCase() != 'span'){
 
-                     return 0;
 
-                 }
 
-                 if (browser.ie) {
 
-                     //ie 下判断实效,所以只能简单用style来判断
 
-                     //return node.style.cssText == '' ? 1 : 0;
 
-                     var attrs = node.attributes;
 
-                     if ( attrs.length ) {
 
-                         for ( var i = 0,l = attrs.length; i<l; i++ ) {
 
-                             if ( attrs[i].specified ) {
 
-                                 return 0;
 
-                             }
 
-                         }
 
-                         return 1;
 
-                     }
 
-                 }
 
-                 return !node.attributes.length;
 
-             }
 
-             function doRemove( range ) {
 
-                 var bookmark1 = range.createBookmark();
 
-                 if ( range.collapsed ) {
 
-                     range.enlarge( true );
 
-                 }
 
-                 //不能把a标签切了
 
-                 if(!notIncludeA){
 
-                     var aNode = domUtils.findParentByTagName(range.startContainer,'a',true);
 
-                     if(aNode){
 
-                         range.setStartBefore(aNode);
 
-                     }
 
-                     aNode = domUtils.findParentByTagName(range.endContainer,'a',true);
 
-                     if(aNode){
 
-                         range.setEndAfter(aNode);
 
-                     }
 
-                 }
 
-                 bookmark = range.createBookmark();
 
-                 node = bookmark.start;
 
-                 //切开始
 
-                 while ( (parent = node.parentNode) && !domUtils.isBlockElm( parent ) ) {
 
-                     domUtils.breakParent( node, parent );
 
-                     domUtils.clearEmptySibling( node );
 
-                 }
 
-                 if ( bookmark.end ) {
 
-                     //切结束
 
-                     node = bookmark.end;
 
-                     while ( (parent = node.parentNode) && !domUtils.isBlockElm( parent ) ) {
 
-                         domUtils.breakParent( node, parent );
 
-                         domUtils.clearEmptySibling( node );
 
-                     }
 
-                     //开始去除样式
 
-                     var current = domUtils.getNextDomNode( bookmark.start, false, filter ),
 
-                         next;
 
-                     while ( current ) {
 
-                         if ( current == bookmark.end ) {
 
-                             break;
 
-                         }
 
-                         next = domUtils.getNextDomNode( current, true, filter );
 
-                         if ( !dtd.$empty[current.tagName.toLowerCase()] && !domUtils.isBookmarkNode( current ) ) {
 
-                             if ( tagReg.test( current.tagName ) ) {
 
-                                 if ( style ) {
 
-                                     domUtils.removeStyle( current, style );
 
-                                     if ( isRedundantSpan( current ) && style != 'text-decoration'){
 
-                                         domUtils.remove( current, true );
 
-                                     }
 
-                                 } else {
 
-                                     domUtils.remove( current, true );
 
-                                 }
 
-                             } else {
 
-                                 //trace:939  不能把list上的样式去掉
 
-                                 if(!dtd.$tableContent[current.tagName] && !dtd.$list[current.tagName]){
 
-                                     domUtils.removeAttributes( current, removeFormatAttributes );
 
-                                     if ( isRedundantSpan( current ) ){
 
-                                         domUtils.remove( current, true );
 
-                                     }
 
-                                 }
 
-                             }
 
-                         }
 
-                         current = next;
 
-                     }
 
-                 }
 
-                 //trace:1035
 
-                 //trace:1096 不能把td上的样式去掉,比如边框
 
-                 var pN = bookmark.start.parentNode;
 
-                 if(domUtils.isBlockElm(pN) && !dtd.$tableContent[pN.tagName] && !dtd.$list[pN.tagName]){
 
-                     domUtils.removeAttributes(  pN,removeFormatAttributes );
 
-                 }
 
-                 pN = bookmark.end.parentNode;
 
-                 if(bookmark.end && domUtils.isBlockElm(pN) && !dtd.$tableContent[pN.tagName]&& !dtd.$list[pN.tagName]){
 
-                     domUtils.removeAttributes(  pN,removeFormatAttributes );
 
-                 }
 
-                 range.moveToBookmark( bookmark ).moveToBookmark(bookmark1);
 
-                 //清除冗余的代码 <b><bookmark></b>
 
-                 var node = range.startContainer,
 
-                     tmp,
 
-                     collapsed = range.collapsed;
 
-                 while(node.nodeType == 1 && domUtils.isEmptyNode(node) && dtd.$removeEmpty[node.tagName]){
 
-                     tmp = node.parentNode;
 
-                     range.setStartBefore(node);
 
-                     //trace:937
 
-                     //更新结束边界
 
-                     if(range.startContainer === range.endContainer){
 
-                         range.endOffset--;
 
-                     }
 
-                     domUtils.remove(node);
 
-                     node = tmp;
 
-                 }
 
-                 if(!collapsed){
 
-                     node = range.endContainer;
 
-                     while(node.nodeType == 1 && domUtils.isEmptyNode(node) && dtd.$removeEmpty[node.tagName]){
 
-                         tmp = node.parentNode;
 
-                         range.setEndBefore(node);
 
-                         domUtils.remove(node);
 
-                         node = tmp;
 
-                     }
 
-                 }
 
-             }
 
-             range = this.selection.getRange();
 
-             doRemove( range );
 
-             range.select();
 
-         }
 
-     };
 
- };
 
 
  |