Merge branch 'plugin-key-bindings' of https://github.com/denehyg/reveal.js into dev

This commit is contained in:
Hakim El Hattab
2017-11-29 09:38:05 +01:00
3 changed files with 104 additions and 19 deletions

View File

@ -289,7 +289,10 @@
'B , .': 'Pause',
'F': 'Fullscreen',
'ESC, O': 'Slide overview'
};
},
// Holds custom key code mappings
registeredKeyBindings = {};
/**
* Starts up the presentation if the client is capable.
@ -1261,6 +1264,33 @@
}
/**
* Add a custom key binding with optional description to be added to the help screen
*/
function addKeyBinding(binding, callback) {
if (typeof binding === 'object' && binding.keyCode) {
registeredKeyBindings[binding.keyCode] = {
callback: callback,
key: binding.key,
description: binding.description
};
}
else {
registeredKeyBindings[binding] = {
callback: callback,
key: null,
description: null
};
}
}
/**
* Removes the specified custom key binding
*/
function removeKeyBinding(binding) {
delete registeredKeyBindings[binding];
}
/**
* Extend object a with the properties of object b.
* If there's a conflict, object b takes precedence.
@ -1748,6 +1778,13 @@
html += '<tr><td>' + key + '</td><td>' + keyboardShortcuts[ key ] + '</td></tr>';
}
// add custom key bindings that have associated descriptions
for( var binding in registeredKeyBindings ) {
if (registeredKeyBindings[binding].key && registeredKeyBindings[binding].description) {
html += '<tr><td>' + registeredKeyBindings[binding].key + '</td><td>' + registeredKeyBindings[binding].description + '</td></tr>';
}
}
html += '</table>';
dom.overlay.innerHTML = [
@ -4397,7 +4434,7 @@
// If there's a condition specified and it returns false,
// ignore this event
if( typeof config.keyboardCondition === 'function' && config.keyboardCondition() === false ) {
if( typeof config.keyboardCondition === 'function' && config.keyboardCondition(event) === false ) {
return true;
}
@ -4462,7 +4499,31 @@
}
// 2. System defined key bindings
// 2. Registered custom key bindings
if( triggered === false ) {
for( key in registeredKeyBindings ) {
// Check if this binding matches the pressed key
if( parseInt( key, 10 ) === event.keyCode ) {
var action = registeredKeyBindings[ key ].callback;
// Callback function
if( typeof action === 'function' ) {
action.apply( null, [ event ] );
}
// String shortcuts to reveal.js API
else if( typeof action === 'string' && typeof Reveal[ action ] === 'function' ) {
Reveal[ action ].call();
}
triggered = true;
}
}
}
// 3. System defined key bindings
if( triggered === false ) {
// Assume true and try to prove false
@ -5222,6 +5283,12 @@
}
},
// Adds a custom key binding
addKeyBinding: addKeyBinding,
// Removes a custom key binding
removeKeyBinding: removeKeyBinding,
// Programatically triggers a keyboard event
triggerKey: function( keyCode ) {
onDocumentKeyDown( { keyCode: keyCode } );