For it’s core architecture I considered use of the Command pattern because of the undo/redo functionality needed. Another thing that makes the editor flexible is it’s easy for extension core. It’s necessary because it’s core is coming just with the command encapsulation, layers logical reordering, some getters and setters. Everything else is achieved (or can be achieved) with different modules with an “init”, “execute” and “undo” methods. For adding extensions I use a single method called “extend” which is makes a shallow copy of the extension (module). The public API of the editor gives two methods used for command execution. The first one encapsulates the command into a stack (used for possible undo) and the second one is used for execution the commands without encapsulation. The second one is useful because of commands like “loadImage”, “saveImage”…etc. which don’t need undo functionality.
Basic functionality of the editor can be saw here: http://mgechev.com/canvas-editor.
I hope that in two/three months it’s full functionality will be implemented and ready for use. If you want to subscribe my development process you can follow me in GitHub, Twitter or read my blog from time to time :-).