-    (function() {
-        function resizeEditor(event, panel) {
-            var panel = panel || event.data.panel;
-            $('iframe', panel).height($(panel).height());
-        }
-        
-        panel(function(event, panel) {
-            console.log('loading panel', panel);
-            var textareaId = 'xmleditor-' + Math.ceil(Math.random() * 1000000000);
-            $('textarea', panel).attr('id', textareaId);
-            var editor = CodeMirror.fromTextArea(textareaId, {
-                parserfile: 'parsexml.js',
-                path: "/static/js/codemirror/",
-                stylesheet: "/static/css/xmlcolors.css",
-                parserConfig: {useHTMLKludges: false},
-                initCallback: function() {}
-            })
-            $(window).bind('resize', {'panel': panel}, resizeEditor);
-            resizeEditor(null, panel);
-        }, function(event, panel) {
-            console.log('unloaded xmleditor panel', panel);
+
+panel_hooks = {
+       load: function () {
+               var self = this;
+               var panel = self.contentDiv;
+
+        var textareaId = 'xmleditor-' + Math.ceil(Math.random() * 1000000000);
+               $('textarea', panel).attr('id', textareaId);
+
+               var texteditor = CodeMirror.fromTextArea(textareaId, {
+            parserfile: 'parsexml.js',
+            path: "{{STATIC_URL}}js/codemirror/",
+            stylesheet: "{{STATIC_URL}}css/xmlcolors.css",
+            parserConfig: {useHTMLKludges: false},
+            onChange: function() {
+                               panel.trigger('panel:contentChanged', self);
+            },
+            initCallback: function(editor) {
+                // Editor is loaded
+                // Buttons are connected
+                // register callbacks for actions
+                
+
+/*                texteditor.grabKeys(function(event) { 
+                    if (keys[event.keyCode]) {
+                        keys[event.keyCode]();
+                    }
+                }, function(event) { return event.altKey && keys[event.keyCode]; }); */
+            }