Here's another example of vi being completely exported to Javascript, but without the canvas element.
http://gpl.internetconnection.net/vi/
What disappoints me about all these implementations is the absence of text objects, though. I love getting edition words or parentheses using commands such as caw and ci"