2 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license
\r
8 // Elements that may be considered the "Block boundary" in an element path.
\r
9 var pathBlockElements = { address:1,blockquote:1,dl:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,p:1,pre:1,li:1,dt:1,dd:1 };
\r
11 // Elements that may be considered the "Block limit" in an element path.
\r
12 var pathBlockLimitElements = { body:1,div:1,table:1,tbody:1,tr:1,td:1,th:1,caption:1,form:1 };
\r
14 // Check if an element contains any block element.
\r
15 var checkHasBlock = function( element )
\r
17 var childNodes = element.getChildren();
\r
19 for ( var i = 0, count = childNodes.count() ; i < count ; i++ )
\r
21 var child = childNodes.getItem( i );
\r
23 if ( child.type == CKEDITOR.NODE_ELEMENT && CKEDITOR.dtd.$block[ child.getName() ] )
\r
30 CKEDITOR.dom.elementPath = function( lastNode )
\r
33 var blockLimit = null;
\r
40 if ( e.type == CKEDITOR.NODE_ELEMENT )
\r
42 if ( !this.lastElement )
\r
43 this.lastElement = e;
\r
45 var elementName = e.getName();
\r
46 if ( CKEDITOR.env.ie && e.$.scopeName != 'HTML' )
\r
47 elementName = e.$.scopeName.toLowerCase() + ':' + elementName;
\r
51 if ( !block && pathBlockElements[ elementName ] )
\r
54 if ( pathBlockLimitElements[ elementName ] )
\r
56 // DIV is considered the Block, if no block is available (#525)
\r
57 // and if it doesn't contain other blocks.
\r
58 if ( !block && elementName == 'div' && !checkHasBlock( e ) )
\r
67 if ( elementName == 'body' )
\r
74 this.blockLimit = blockLimit;
\r
75 this.elements = elements;
\r
79 CKEDITOR.dom.elementPath.prototype =
\r
82 * Compares this element path with another one.
\r
83 * @param {CKEDITOR.dom.elementPath} otherPath The elementPath object to be
\r
84 * compared with this one.
\r
85 * @returns {Boolean} "true" if the paths are equal, containing the same
\r
86 * number of elements and the same elements in the same order.
\r
88 compare : function( otherPath )
\r
90 var thisElements = this.elements;
\r
91 var otherElements = otherPath && otherPath.elements;
\r
93 if ( !otherElements || thisElements.length != otherElements.length )
\r
96 for ( var i = 0 ; i < thisElements.length ; i++ )
\r
98 if ( !thisElements[ i ].equals( otherElements[ i ] ) )
\r
105 contains : function( tagNames )
\r
107 var elements = this.elements;
\r
108 for ( var i = 0 ; i < elements.length ; i++ )
\r
110 if ( elements[ i ].getName() in tagNames )
\r
111 return elements[ i ];
\r