Skip to content

Commit

Permalink
reader mode tests
Browse files Browse the repository at this point in the history
  • Loading branch information
hakimel committed Oct 6, 2023
1 parent ab52d33 commit d84aa34
Show file tree
Hide file tree
Showing 8 changed files with 132 additions and 25 deletions.
2 changes: 1 addition & 1 deletion dist/reveal.esm.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/reveal.esm.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/reveal.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion dist/reveal.js.map

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion js/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ export default {
// Time before the cursor is hidden (in ms)
hideCursorTime: 5000,

// Should we automatmically sort and set indices for fragments
// Should we automatically sort and set indices for fragments
// at each sync? (See Reveal.sync)
sortFragmentsOnSync: true,

Expand Down
12 changes: 5 additions & 7 deletions js/controllers/reader.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export default class Reader {
* Activates the reader mode. This rearranges the presentation DOM
* by—among other things—wrapping each slide in a page element.
*/
async activate() {
activate() {

if( this.active ) return;

Expand Down Expand Up @@ -89,8 +89,6 @@ export default class Reader {
// Remove leftover stacks
queryAll( this.Reveal.getRevealElement(), '.stack' ).forEach( stack => stack.remove() );

await new Promise( requestAnimationFrame );

pageElements.forEach( page => pageContainer.appendChild( page ) );

// Re-run JS-based content layout after the slide is added to page DOM
Expand Down Expand Up @@ -128,13 +126,13 @@ export default class Reader {

}

toggle() {
toggle( override ) {

if( this.active === true ) {
this.deactivate();
if( typeof override === 'boolean' ) {
override ? this.activate() : this.deactivate();
}
else {
this.activate();
this.isActive() ? this.deactivate() : this.activate();
}

}
Expand Down
20 changes: 7 additions & 13 deletions js/reveal.js
Original file line number Diff line number Diff line change
Expand Up @@ -249,24 +249,18 @@ export default function( revealElement, options ) {
// Avoid content flickering during layout
dom.viewport.classList.add( 'loading-scroll-mode' );

const activate = () => {
if( activatePrintView ) {
if( activatePrintView ) {
// The document needs to have loaded for the PDF layout
// measurements to be accurate
if( document.readyState === 'complete' ) {
print.activate();
}
else {
reader.activate();
window.addEventListener( 'load', () => print.activate() );
}
};

// The document needs to have loaded for the PDF layout
// measurements to be accurate
if( document.readyState === 'complete' ) {
activate();
}
else {
window.addEventListener( 'load', () => {
activate();
} );
reader.activate();
}
}

Expand Down Expand Up @@ -2784,7 +2778,7 @@ export default function( revealElement, options ) {
toggleOverview: overview.toggle.bind( overview ),

// Toggles the reader mode on/off
toggleReader: reader.toggle.bind( reader ),
toggleReaderMode: reader.toggle.bind( reader ),

// Toggles the "black screen" mode on/off
togglePause,
Expand Down
115 changes: 115 additions & 0 deletions test/test-reader-mode.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
<!doctype html>
<html lang="en">

<head>
<meta charset="utf-8">

<title>reveal.js - Test Reader Mode</title>

<link rel="stylesheet" href="../dist/reveal.css">
<link rel="stylesheet" href="../node_modules/qunit/qunit/qunit.css">
<script src="../node_modules/qunit/qunit/qunit.js"></script>
</head>

<body style="overflow: auto;">

<div id="qunit"></div>
<div id="qunit-fixture"></div>

<div class="reveal" style="opacity: 0; pointer-events: none;">

<div class="slides">

<section>
<h1>slide 1</h1>
</section>

<section>
<h1>slide 2</h1>
</section>

<section>
<h1>slide 3</h1>
<p class="fragment">fragment 1</p>
<p class="fragment">fragment 2</p>
<p class="fragment">fragment 3</p>
</section>

<section>
<h1>slide 4</h1>
</section>

</div>

</div>

<script src="../dist/reveal.js"></script>
<script>

QUnit.config.testTimeout = 30000;
QUnit.config.reorder = false;

function getScrollHeight() {
return Reveal.getViewportElement().scrollHeight;
}

function getViewportHeight() {
return Reveal.getViewportElement().offsetHeight;
}

Reveal.initialize({ view: 'reader' }).then( async () => {

QUnit.module( 'Reader Mode' );

QUnit.test( 'Activates', assert => {
assert.ok( getScrollHeight() > getViewportHeight(), 'Is overflowing' );
});

QUnit.test( 'Can be toggled via API', assert => {
Reveal.toggleReaderMode( false );
assert.ok( getScrollHeight() <= getViewportHeight(), 'Is not overflowing' );
Reveal.toggleReaderMode( true );
assert.ok( getScrollHeight() > getViewportHeight(), 'Is overflowing' );
});

QUnit.test( 'Changes present slide when scrolling', assert => {
assert.timeout( 200 );
assert.expect( 2 );

const slides = document.querySelectorAll( '.reveal .slides section' );

assert.ok( slides[0].classList.contains( 'present' ), 'First slide is present' );
Reveal.getViewportElement().scrollTop = getViewportHeight() * 1;

return new Promise( resolve => {
setTimeout(() => {
assert.ok( slides[1].classList.contains( 'present' ), 'Second slide is present' );
resolve();
}, 100);
} );
});

QUnit.test( 'Fires slideschanged event when scrolling', assert => {
assert.timeout( 200 );
assert.expect( 2 );

const slides = document.querySelectorAll( '.reveal .slides section' );

return new Promise( resolve => {
let callback = ( event ) => {
Reveal.off( 'slidechanged', callback );
assert.ok( true, 'slidechanged event fired' );
assert.ok( event.currentSlide.classList.contains( 'present' ), 'slidechanged provides reference to currentSlide' );
resolve();
}

Reveal.on( 'slidechanged', callback );
Reveal.getViewportElement().scrollTop = getViewportHeight() * 2;
});
});

} );
</script>

</body>
</html>

0 comments on commit d84aa34

Please sign in to comment.