Code Review

It seems like there is *a lot* of code in this Canvas object and since it's just named Canvas, I'm not totally clear what it is.

My first thought is to separate the full Canvas from each node and have the center circle (problem) be a special version of a node.  You can use constructor functions and inheritance to perform this just like you would in Ruby.  So a Canvas would have many nodes.  A node can be shown and hidden and created and hovered.  A problem/main node is a special node that also handles text wrapping (or it's just a node class, but Canvas knows it's the center).

Regardless, I'd try to break up the Canvas code -- it'll help it stay maintainable, be readable, and be easier to test.