-    findCanvasElement: function(node) {
-        return utils.findCanvasElement(node);
-    },
-
-    toggleGrid: function() {
-        this.wrapper.toggleClass('grid-on');
-        this.trigger('changed');
-    },
-    isGridToggled: function() {
-        return this.wrapper.hasClass('grid-on');
-    }
-});
-
-
-var isText = function(node) {
-    return node && node.nodeType === Node.TEXT_NODE && $(node.parentNode).is('[document-text-element]');
-};
-
-var Selection = function(canvas) {
-    this.canvas = canvas;
-    var nativeSelection = this.nativeSelection = window.getSelection();
-    Object.defineProperty(this, 'type', {
-        get: function() {
-            if(nativeSelection.focusNode) {
-                if(nativeSelection.isCollapsed && isText(nativeSelection.focusNode)) {
-                    return 'caret';
-                }
-                if(isText(nativeSelection.focusNode) && isText(nativeSelection.anchorNode)) {
-                    return 'textSelection';
-                }
-            }
-            if(canvas.getCurrentNodeElement()) {
-                return 'node';
-            }
+        while(element) {
+            (element.contextMenuActions || []).forEach(menu.addAction.bind(menu));
+            element = element.parent();