+++ /dev/null
-/*\r
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.\r
-For licensing, see LICENSE.html or http://ckeditor.com/license\r
-*/\r
-\r
-(function()\r
-{\r
- // Elements that may be considered the "Block boundary" in an element path.\r
- 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, legend:1,caption:1 };\r
-\r
- // Elements that may be considered the "Block limit" in an element path.\r
- var pathBlockLimitElements = { body:1,div:1,table:1,tbody:1,tr:1,td:1,th:1,form:1,fieldset:1 };\r
-\r
- // Check if an element contains any block element.\r
- var checkHasBlock = function( element )\r
- {\r
- var childNodes = element.getChildren();\r
-\r
- for ( var i = 0, count = childNodes.count() ; i < count ; i++ )\r
- {\r
- var child = childNodes.getItem( i );\r
-\r
- if ( child.type == CKEDITOR.NODE_ELEMENT && CKEDITOR.dtd.$block[ child.getName() ] )\r
- return true;\r
- }\r
-\r
- return false;\r
- };\r
-\r
- /**\r
- * @class\r
- */\r
- CKEDITOR.dom.elementPath = function( lastNode )\r
- {\r
- var block = null;\r
- var blockLimit = null;\r
- var elements = [];\r
-\r
- var e = lastNode;\r
-\r
- while ( e )\r
- {\r
- if ( e.type == CKEDITOR.NODE_ELEMENT )\r
- {\r
- if ( !this.lastElement )\r
- this.lastElement = e;\r
-\r
- var elementName = e.getName();\r
-\r
- if ( !blockLimit )\r
- {\r
- if ( !block && pathBlockElements[ elementName ] )\r
- block = e;\r
-\r
- if ( pathBlockLimitElements[ elementName ] )\r
- {\r
- // DIV is considered the Block, if no block is available (#525)\r
- // and if it doesn't contain other blocks.\r
- if ( !block && elementName == 'div' && !checkHasBlock( e ) )\r
- block = e;\r
- else\r
- blockLimit = e;\r
- }\r
- }\r
-\r
- elements.push( e );\r
-\r
- if ( elementName == 'body' )\r
- break;\r
- }\r
- e = e.getParent();\r
- }\r
-\r
- this.block = block;\r
- this.blockLimit = blockLimit;\r
- this.elements = elements;\r
- };\r
-})();\r
-\r
-CKEDITOR.dom.elementPath.prototype =\r
-{\r
- /**\r
- * Compares this element path with another one.\r
- * @param {CKEDITOR.dom.elementPath} otherPath The elementPath object to be\r
- * compared with this one.\r
- * @returns {Boolean} "true" if the paths are equal, containing the same\r
- * number of elements and the same elements in the same order.\r
- */\r
- compare : function( otherPath )\r
- {\r
- var thisElements = this.elements;\r
- var otherElements = otherPath && otherPath.elements;\r
-\r
- if ( !otherElements || thisElements.length != otherElements.length )\r
- return false;\r
-\r
- for ( var i = 0 ; i < thisElements.length ; i++ )\r
- {\r
- if ( !thisElements[ i ].equals( otherElements[ i ] ) )\r
- return false;\r
- }\r
-\r
- return true;\r
- },\r
-\r
- contains : function( tagNames )\r
- {\r
- var elements = this.elements;\r
- for ( var i = 0 ; i < elements.length ; i++ )\r
- {\r
- if ( elements[ i ].getName() in tagNames )\r
- return elements[ i ];\r
- }\r
-\r
- return null;\r
- }\r
-};\r