function Buttons(session) { var mapping; var mappingsStack = []; var buttons = { 'A': 0, 'B': 1, 'Left': 2, 'Right': 3, 'Up': 4, 'Down': 5, 'Start': 6, 'Select': 7 }; document.addEventListener('keydown', function(event) { var button = session.get('options').layout[event.key]; if(button != undefined && mapping[button] != undefined) { event.preventDefault(); mapping[button](); } }); return { assign: assign, code: code, map: map, pop: pop, push: push }; function assign(key, button) { var layoutDiff = {}; var layout = session.get('options').layout; for(var currentKey in layout) { if(layout[currentKey] == button) { layoutDiff[currentKey] = undefined; break; } } layoutDiff[key] = button; return {layoutDiff: layoutDiff, button: layout[key] != button ? layout[key] : null}; } function code(button) { return buttons[button]; } function map(newMapping) { mapping = newMapping; } function pop() { mappingsStack.pop(); map(mappingsStack[mappingsStack.length-1]); } function push(newMapping) { mappingsStack.push(newMapping); map(newMapping); } }