function Buttons(session) { var mapping; var mappingsStack = []; document.addEventListener('keydown', function(event) { var button = session.getOptions().layout[event.key]; if(button != undefined && mapping[button] != undefined) { event.preventDefault(); mapping[button](); } }); return { findKey: findKey, map: map, pop: pop, push: push }; function findKey(button) { var layout = session.getOptions().layout; for(var key in layout) { if(layout[key] == button) { return key; } } } function map(newMapping) { mapping = newMapping; } function pop() { mappingsStack.pop(); map(mappingsStack[mappingsStack.length-1]); } function push(newMapping) { mappingsStack.push(newMapping); map(newMapping); } }