diff --git a/js/reveal.js b/js/reveal.js index 5dc6856..55642e2 100644 --- a/js/reveal.js +++ b/js/reveal.js @@ -2286,7 +2286,7 @@ var Reveal = (function(){ element.removeAttribute( 'data-src' ); } ); - // Media elements with multiple s + // Media elements with children toArray( slide.querySelectorAll( 'video, audio' ) ).forEach( function( media ) { var sources = 0; @@ -2634,6 +2634,38 @@ var Reveal = (function(){ } + function getSlide( x, y ) { + + var horizontalSlide = document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR )[ x ]; + var verticalSlides = horizontalSlide && horizontalSlide.querySelectorAll( 'section' ); + + if( typeof y === 'number' ) { + return verticalSlides ? verticalSlides[ y ] : undefined; + } + + return horizontalSlide; + + } + + /** + * Returns the background element for the given slide. + * All slides, even the ones with no background properties + * defined, have a background element so this never returns + * null. + */ + function getSlideBackground( x, y ) { + + var horizontalBackground = document.querySelectorAll( '.backgrounds>.slide-background' )[ x ]; + var verticalBackgrounds = horizontalBackground && horizontalBackground.querySelectorAll( '.slide-background' ); + + if( typeof y === 'number' ) { + return verticalBackgrounds ? verticalBackgrounds[ y ] : undefined; + } + + return horizontalBackground; + + } + /** * Retrieves the current state of the presentation as * an object. This state can then be restored at any @@ -3720,17 +3752,11 @@ var Reveal = (function(){ getTotalSlides: getTotalSlides, - // Returns the slide at the specified index, y is optional - getSlide: function( x, y ) { - var horizontalSlide = document.querySelectorAll( HORIZONTAL_SLIDES_SELECTOR )[ x ]; - var verticalSlides = horizontalSlide && horizontalSlide.querySelectorAll( 'section' ); + // Returns the slide element at the specified index + getSlide: getSlide, - if( typeof y !== 'undefined' ) { - return verticalSlides ? verticalSlides[ y ] : undefined; - } - - return horizontalSlide; - }, + // Returns the slide background element at the specified index + getSlideBackground: getSlideBackground, // Returns the previous slide element, may be null getPreviousSlide: function() { diff --git a/test/test.js b/test/test.js index 93a3d61..30b5c75 100644 --- a/test/test.js +++ b/test/test.js @@ -109,6 +109,14 @@ Reveal.addEventListener( 'ready', function() { strictEqual( Reveal.getSlide( 100 ), undefined, 'returns undefined when slide can\'t be found' ); }); + test( 'Reveal.getSlideBackground', function() { + var firstBackground = document.querySelector( '.reveal .backgrounds>.slide-background:first-child' ); + + equal( Reveal.getSlideBackground( 0 ), firstBackground, 'gets correct first background' ); + + strictEqual( Reveal.getSlideBackground( 100 ), undefined, 'returns undefined when background can\'t be found' ); + }); + test( 'Reveal.getPreviousSlide/getCurrentSlide', function() { Reveal.slide( 0, 0 ); Reveal.slide( 1, 0 );