-
Notifications
You must be signed in to change notification settings - Fork 2
/
helpbutton.js
132 lines (117 loc) · 4.06 KB
/
helpbutton.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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
var HelpButton = ( function( _Reveal ){
var Reveal = _Reveal;
var defMode = 'first';
function addStylesheet( href ){
var link = document.createElement( 'link' );
link.rel = 'stylesheet';
link.href = href;
document.querySelector( 'head' ).appendChild( link );
}
function installStylesheets(){
// Plugins may be stored outside of the reveal installation
// therefore we have to find out the proper path first
var config = Reveal.getConfig();
var regex = /\bhelpbutton.js$/i;
var help_config = Array.from( document.querySelectorAll( 'script' ) ).find( function( e ){
return e.attributes.src && e.attributes.src.value.search( regex ) >= 0;
});
if( !help_config ){
console.error( 'helpbutton.js not found in config dependencies. Did you rename this file?' );
return;
}
var path = help_config.src.replace( regex, '' );
addStylesheet( path + 'helpbutton.css' );
}
function installHelpButtonDom( event ){
// install help button in lower left position but initially
// hide it until all styles are set
var control = document.createElement( 'aside' );
control.classList.add( 'controls', 'helpbutton' );
control.innerHTML = '<button class="show-help" aria-label="show help" disabled="disabled" style="display: none;" onclick="Reveal.toggleHelp()"><div class="controls-help"></div></button>';
document.querySelector( '.reveal' ).appendChild( control );
}
function setHelpButtonConfig( o ){
var values = [ 'none', 'first', 'intro', 'always' ];
var config = Reveal.getConfig();
var helpButtonDisplay = o===Object(o) && o.helpButtonDisplay ? o.helpButtonDisplay
: config.helpButtonDisplay ? config.helpButtonDisplay
: defMode;
if( values.indexOf( helpButtonDisplay ) < 0 ){
console.error( 'Invalid value for configuration helpButtonDisplay. Allowed values are: ' + values.join( ', ') + '. Falling back to default ' + defMode + '.');
helpButtonDisplay = defMode;
}
Reveal.configure({ helpButtonDisplay: helpButtonDisplay });
}
function setHelpButton( event ){
// event.previousSlide, event.currentSlide, event.indexh, event.indexv
var help = document.querySelector( '.show-help' );
if( help ){
var config = Reveal.getConfig();
var display = 'none';
if( config.helpButtonDisplay == 'always'
|| ( config.helpButtonDisplay == 'intro' && !event.indexh )
|| ( config.helpButtonDisplay == 'first' && !event.indexh && !event.indexv ) ){
display = 'block';
}
if( help.style.display != display ){
help.style.display = display;
}
if( display == 'none' ){
help.classList.remove( 'enabled' );
help.setAttribute( 'disabled', 'disabled' );
}else{
help.classList.add( 'enabled' );
help.removeAttribute( 'disabled' );
}
}
}
function toggleHelpButton( event ){
setHelpButton({
previousSlide: Reveal.getPreviousSlide(),
currentSlide: Reveal.getCurrentSlide(),
indexh: Reveal.getIndices().h,
indexv: Reveal.getIndices().v
});
}
function installHelpButton(){
installHelpButtonDom();
// the slidechange event will not be triggered on
// initial page load, so we need to toggle the
// button manually here once
Reveal.addEventListener( 'slidechanged', setHelpButton );
toggleHelpButton();
}
function configure( o ){
setHelpButtonConfig( o );
toggleHelpButton();
}
function install(){
installStylesheets();
setHelpButtonConfig();
// in case we are loading async the ready event may already
// been emitted, so test here for readiness here and install
// manually here
if( Reveal.isReady() ){
installHelpButton();
}else{
Reveal.addEventListener( 'ready', function(){
installHelpButton();
});
}
}
var Plugin = {
configure: configure
}
if( Reveal && Reveal.VERSION && Reveal.VERSION.length && Reveal.VERSION[ 0 ] == '3' ){
// reveal 3.x
install();
}else{
// must be reveal 4.x
Plugin.id = 'help-button';
Plugin.init = function( _Reveal ){
Reveal = _Reveal;
install();
};
}
return Plugin;
})( Reveal );