Implementación de deshacer en una aplicación web

Estoy creando una aplicación web de edición de mapas donde podemos crear y editar polilíneas, polígonos, etc. Tengo algunos problemas para encontrar información sobre la implementación de deshacer en la web, encuentro quejas sobre "necesitamos deshacer" y "aquí está mi patrón de Comando usando cierres ", pero creo que entre eso y una interfaz completa para deshacer / rehacer hay bastante camino.

Entonces, aquí están mis preguntas (buen candidato para wiki, creo):

DeberíaI administrar la pila, o ¿hay alguna forma de enviar mis comandos a la pila del navegador? (y cómo manejo los comandos nativos, como las ediciones de texto en campos de texto en este caso) ¿Cómo manejo la "compresión de comandos" (agrupación de comandos) cuando algunos comandos son nativos del navegador¿Cómo detecto la pulsación de tecla Deshacer (Ctrl + Z)?Si registro un evento de keyup, ¿cómo decido si evito el incumplimiento o no? Si no, ¿puedo registrar algún controlador de deshacer eventos en alguna parte?Los usuarios no están acostumbrados a deshacer en la web, ¿cómo puedo "entrenarlos" para explorar / deshacer en mi aplicación?

Gracias a todos