summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorHakim El Hattab2020-01-15 11:37:37 +0100
committerHakim El Hattab2020-01-15 11:37:37 +0100
commitac5075352163e4d5806db95f936372658f12d04f (patch)
tree1cee2005f9215b0a9f5adfe44a580be3b1a456f1
parent76187bc666fcea9d3c3aae82c49c9100d4242f9d (diff)
add data-fragment=<index> attribute to slide <sections>
-rw-r--r--js/reveal.js11
-rw-r--r--test/test.js16
2 files changed, 27 insertions, 0 deletions
diff --git a/js/reveal.js b/js/reveal.js
index fce3dbc..da806fc 100644
--- a/js/reveal.js
+++ b/js/reveal.js
@@ -4751,6 +4751,8 @@
if( fragments.length ) {
+ var maxIndex = 0;
+
if( typeof index !== 'number' ) {
var currentFragment = sortFragments( currentSlide.querySelectorAll( '.fragment.visible' ) ).pop();
if( currentFragment ) {
@@ -4764,6 +4766,8 @@
i = parseInt( el.getAttribute( 'data-fragment-index' ), 10 );
}
+ maxIndex = Math.max( maxIndex, i );
+
// Visible fragments
if( i <= index ) {
if( !el.classList.contains( 'visible' ) ) changedFragments.shown.push( el );
@@ -4787,6 +4791,13 @@
} );
+ // Write the current fragment index to the slide <section>.
+ // This can be used by end users to apply styles based on
+ // the current fragment index.
+ index = typeof index === 'number' ? index : -1;
+ index = Math.max( Math.min( index, maxIndex ), -1 );
+ currentSlide.setAttribute( 'data-fragment', index );
+
}
}
diff --git a/test/test.js b/test/test.js
index 2738403..14bb690 100644
--- a/test/test.js
+++ b/test/test.js
@@ -250,6 +250,22 @@ Reveal.addEventListener( 'ready', function() {
assert.deepEqual( Reveal.getIndices(), { h: 2, v: 0, f: 1 }, 'Reveal.slide( 2, 0, 1 )' );
});
+ QUnit.test( 'data-fragment is set on slide <section>', function( assert ) {
+ Reveal.slide( 2, 0, -1 );
+ assert.deepEqual( Reveal.getCurrentSlide().getAttribute( 'data-fragment' ), '-1' );
+
+ Reveal.slide( 2, 0, 2 );
+ assert.deepEqual( Reveal.getCurrentSlide().getAttribute( 'data-fragment' ), '2' );
+
+ Reveal.slide( 2, 0, 0 );
+ assert.deepEqual( Reveal.getCurrentSlide().getAttribute( 'data-fragment' ), '0' );
+
+ var fragmentSlide = Reveal.getCurrentSlide();
+
+ Reveal.slide( 3, 0 );
+ assert.deepEqual( fragmentSlide.getAttribute( 'data-fragment' ), '0', 'data-fragment persists when jumping to another slide' );
+ });
+
QUnit.test( 'Hiding all fragments', function( assert ) {
var fragmentSlide = document.querySelector( '#fragment-slides>section:nth-child(1)' );