From c4e202cd0ffeedc817c0506116744102dd63419a Mon Sep 17 00:00:00 2001 From: Hakim El Hattab Date: Wed, 7 May 2014 22:02:05 +0200 Subject: [PATCH] fix edge case in singleton node creation --- js/reveal.js | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/js/reveal.js b/js/reveal.js index cccc387..da43738 100644 --- a/js/reveal.js +++ b/js/reveal.js @@ -518,18 +518,26 @@ */ function createSingletonNode( container, tagname, classname, innerHTML ) { - var node = container.querySelector( '.' + classname ); + // Find all nodes matching the description + var nodes = container.querySelectorAll( '.' + classname ); - // If no node was found or the node is inside another container - if( !node || node.parentNode !== container ) { - node = document.createElement( tagname ); - node.classList.add( classname ); - if( typeof innerHTML === 'string' ) { - node.innerHTML = innerHTML; + // Check all matches to find one which is a direct child of + // the specified container + for( var i = 0; i < nodes.length; i++ ) { + var testNode = nodes[i]; + if( testNode.parentNode === container ) { + return testNode; } - container.appendChild( node ); } + // If no node was found, create it now + var node = document.createElement( tagname ); + node.classList.add( classname ); + if( typeof innerHTML === 'string' ) { + node.innerHTML = innerHTML; + } + container.appendChild( node ); + return node; }