| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 | 
							- /**
 
-  * 设置文字输入的方向的插件
 
-  * @file
 
-  * @since 1.2.6.1
 
-  */
 
- (function() {
 
-     var block = domUtils.isBlockElm ,
 
-         getObj = function(editor){
 
- //            var startNode = editor.selection.getStart(),
 
- //                parents;
 
- //            if ( startNode ) {
 
- //                //查找所有的是block的父亲节点
 
- //                parents = domUtils.findParents( startNode, true, block, true );
 
- //                for ( var i = 0,ci; ci = parents[i++]; ) {
 
- //                    if ( ci.getAttribute( 'dir' ) ) {
 
- //                        return ci;
 
- //                    }
 
- //                }
 
- //            }
 
-             return domUtils.filterNodeList(editor.selection.getStartElementPath(),function(n){return n && n.nodeType == 1 && n.getAttribute('dir')});
 
-         },
 
-         doDirectionality = function(range,editor,forward){
 
-             
 
-             var bookmark,
 
-                 filterFn = function( node ) {
 
-                     return   node.nodeType == 1 ? !domUtils.isBookmarkNode(node) : !domUtils.isWhitespace(node);
 
-                 },
 
-                 obj = getObj( editor );
 
-             if ( obj && range.collapsed ) {
 
-                 obj.setAttribute( 'dir', forward );
 
-                 return range;
 
-             }
 
-             bookmark = range.createBookmark();
 
-             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 );
 
-                     var common = tmpRange.getCommonAncestor();
 
-                     if ( !domUtils.isBody( common ) && block( common ) ) {
 
-                         //遍历到了block节点
 
-                         common.setAttribute( 'dir', forward );
 
-                         current = common;
 
-                     } else {
 
-                         //没有遍历到,添加一个block节点
 
-                         var p = range.document.createElement( 'p' );
 
-                         p.setAttribute( 'dir', forward );
 
-                         var frag = tmpRange.extractContents();
 
-                         p.appendChild( frag );
 
-                         tmpRange.insertNode( p );
 
-                         current = p;
 
-                     }
 
-                     current = domUtils.getNextDomNode( current, false, filterFn );
 
-                 } else {
 
-                     current = domUtils.getNextDomNode( current, true, filterFn );
 
-                 }
 
-             }
 
-             return range.moveToBookmark( bookmark2 ).moveToBookmark( bookmark );
 
-         };
 
-     /**
 
-      * 文字输入方向
 
-      * @command directionality
 
-      * @method execCommand
 
-      * @param { String } cmdName 命令字符串
 
-      * @param { String } forward 传入'ltr'表示从左向右输入,传入'rtl'表示从右向左输入
 
-      * @example
 
-      * ```javascript
 
-      * editor.execCommand( 'directionality', 'ltr');
 
-      * ```
 
-      */
 
-     /**
 
-      * 查询当前选区的文字输入方向
 
-      * @command directionality
 
-      * @method queryCommandValue
 
-      * @param { String } cmdName 命令字符串
 
-      * @return { String } 返回'ltr'表示从左向右输入,返回'rtl'表示从右向左输入
 
-      * @example
 
-      * ```javascript
 
-      * editor.queryCommandValue( 'directionality');
 
-      * ```
 
-      */
 
-     UE.commands['directionality'] = {
 
-         execCommand : function( cmdName,forward ) {
 
-             var range = this.selection.getRange();
 
-             //闭合时单独处理
 
-             if(range.collapsed){
 
-                 var txt = this.document.createTextNode('d');
 
-                 range.insertNode(txt);
 
-             }
 
-             doDirectionality(range,this,forward);
 
-             if(txt){
 
-                 range.setStartBefore(txt).collapse(true);
 
-                 domUtils.remove(txt);
 
-             }
 
-             range.select();
 
-             return true;
 
-         },
 
-         queryCommandValue : function() {
 
-             var node = getObj(this);
 
-             return node ? node.getAttribute('dir') : 'ltr';
 
-         }
 
-     };
 
- })();
 
 
  |