move keyboard event binding in block
fix reset() from being called twice on init
added canUndo(), canRedo(), added disabled handling to buttons