X-Git-Url: https://git.immae.eu/?p=perso%2FImmae%2FProjets%2Fpackagist%2Fpiedsjaloux-ckeditor-component.git;a=blobdiff_plain;f=sources%2Fcore%2Fdom%2Felementpath.js;fp=sources%2Fcore%2Fdom%2Felementpath.js;h=dd50f103b50f5de54a9192b1ef48395f17702419;hp=1ee551bb62b3561e2f3a585c09133a8b20b72551;hb=317f8f8f0651488f226b5280a8f036c7c135c639;hpb=1096cdefb1c9a3f3c4ca6807e272da6c92e5ed9c diff --git a/sources/core/dom/elementpath.js b/sources/core/dom/elementpath.js index 1ee551b..dd50f10 100644 --- a/sources/core/dom/elementpath.js +++ b/sources/core/dom/elementpath.js @@ -1,5 +1,5 @@ /** - * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. + * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ @@ -57,6 +57,11 @@ // Backward compact. root = root || startNode.getDocument().getBody(); + // Assign root value if startNode is null (#424)(https://dev.ckeditor.com/ticket/17028). + if ( !e ) { + e = root; + } + do { if ( e.type == CKEDITOR.NODE_ELEMENT ) { elements.push( e ); @@ -84,7 +89,7 @@ block = e; if ( pathBlockLimitElements[ elementName ] ) { - // End level DIV is considered as the block, if no block is available. (#525) + // End level DIV is considered as the block, if no block is available. (http://dev.ckeditor.com/ticket/525) // But it must NOT be the root element (checked above). if ( !block && elementName == 'div' && !checkHasBlock( e ) ) block = e; @@ -181,7 +186,9 @@ CKEDITOR.dom.elementPath.prototype = { * @returns {CKEDITOR.dom.element} The first matched dom element or `null`. */ contains: function( query, excludeRoot, fromTop ) { - var evaluator; + var i = 0, + evaluator; + if ( typeof query == 'string' ) evaluator = function( node ) { return node.getName() == query; @@ -203,14 +210,21 @@ CKEDITOR.dom.elementPath.prototype = { var elements = this.elements, length = elements.length; - excludeRoot && length--; + + if ( excludeRoot ) { + if ( !fromTop ) { + length -= 1; + } else { + i += 1; + } + } if ( fromTop ) { elements = Array.prototype.slice.call( elements, 0 ); elements.reverse(); } - for ( var i = 0; i < length; i++ ) { + for ( ; i < length; i++ ) { if ( evaluator( elements[ i ] ) ) return elements[ i ]; }