https://github.com/jscott1989/jsundoable довольно хорошо. Гибкое.
Вы можете использовать http://www.openjs.com/scripts/events/keyboard_shortcuts для прикрепления сочетания клавиш
Что мне нравится в этом, так это групповые возможности. Вы реализуете функцию отмены на самых низких возможных уровнях, а затем в более высоких функциях вам не нужно беспокоиться об отмене, просто сгруппируйте каждое отдельное действие в другую группу. Я нахожу это чрезвычайно интуитивным, поскольку по логике вещей, если вы отмените каждое небольшое действие, которое вы предпринимаете, весь процесс будет безупречным.
Также очень легко слиться с существующим проектом, поскольку я недавно сделал это с моим большим кодом, который обрабатывает множество манипуляций и обработок DOM.