-
Notifications
You must be signed in to change notification settings - Fork 6.7k
/
Copy pathprogress.js
58 lines (51 loc) · 1.8 KB
/
progress.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
/* global document */
( function( document ) {
"use strict";
var root;
var stepids = [];
// Get stepids from the steps under impress root
var getSteps = function() {
stepids = [];
var steps = root.querySelectorAll( ".step" );
for ( var i = 0; i < steps.length; i++ )
{
stepids[ i + 1 ] = steps[ i ].id;
}
};
// Wait for impress.js to be initialized
document.addEventListener( "impress:init", function( event ) {
root = event.target;
getSteps();
var gc = event.detail.api.lib.gc;
gc.pushCallback( function() {
stepids = [];
if ( progressbar ) {
progressbar.style.width = "";
}
if ( progress ) {
progress.innerHTML = "";
}
} );
} );
var progressbar = document.querySelector( "div.impress-progressbar div" );
var progress = document.querySelector( "div.impress-progress" );
if ( null !== progressbar || null !== progress ) {
document.addEventListener( "impress:stepleave", function( event ) {
updateProgressbar( event.detail.next.id );
} );
document.addEventListener( "impress:steprefresh", function( event ) {
getSteps();
updateProgressbar( event.target.id );
} );
}
function updateProgressbar( slideId ) {
var slideNumber = stepids.indexOf( slideId );
if ( null !== progressbar ) {
var width = 100 / ( stepids.length - 1 ) * ( slideNumber );
progressbar.style.width = width.toFixed( 2 ) + "%";
}
if ( null !== progress ) {
progress.innerHTML = slideNumber + "/" + ( stepids.length - 1 );
}
}
} )( document );