Dodanie funkcji panel do tworzenia nowych paneli edytora i refaktoring xmleditor...
authorzuber <marek@stepniowski.com>
Sat, 22 Aug 2009 14:20:28 +0000 (16:20 +0200)
committerzuber <marek@stepniowski.com>
Sat, 22 Aug 2009 14:20:28 +0000 (16:20 +0200)
project/static/js/panels.js
project/templates/explorer/panels/xmleditor.html

index eca4ddf..eb1380d 100644 (file)
@@ -6,17 +6,34 @@ function loadPanel(target, url) {
         dataType: 'html',
         success: function(data, textStatus) {
             $(target).html(data);
         dataType: 'html',
         success: function(data, textStatus) {
             $(target).html(data);
-            $(document).trigger('panel:unload', target);
             $(document).trigger('panel:load', target);
             // panel(target);
         },
         error: function(request, textStatus, errorThrown) {
             $(document).trigger('panel:load', target);
             // panel(target);
         },
         error: function(request, textStatus, errorThrown) {
-            $(document).trigger('panel:unload', target);
             console.log('ajax', url, target, 'error:', textStatus, errorThrown);
         }
     });
 }
 
             console.log('ajax', url, target, 'error:', textStatus, errorThrown);
         }
     });
 }
 
+// Funkcja do tworzenia nowych paneli
+function panel(load, unload) {
+    var self = null;
+    var eventId = Math.ceil(Math.random() * 1000000000);
+    
+    unloadHandler = function(event, panel) {
+        if (self && self == panel) {
+            $(document).unbind('panel:unload.' + eventId, unloadHandler);
+            unload(event, panel);
+        }
+    };
+    
+    $(document).one('panel:load', function(event, panel) {
+        self = panel;
+        $(document).bind('panel:unload.' + eventId, unloadHandler);
+        load(event, panel);
+    });
+}
+
 $(function() {
     // ========================
     // = Resizable panels =
 $(function() {
     // ========================
     // = Resizable panels =
index 356b76c..6bdcc30 100644 (file)
@@ -2,34 +2,18 @@
     <textarea name="text" width="480px"><ala><ma></ma></ala></textarea>
 </div>
 <script type="text/javascript" charset="utf-8">
     <textarea name="text" width="480px"><ala><ma></ma></ala></textarea>
 </div>
 <script type="text/javascript" charset="utf-8">
-    (function() {
-        var self = null;
-        var id = Math.ceil(Math.random() * 1000000000);
-        
-        var load = function(event, panel) {
-            console.log('loading panel', panel);
-            self = 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() {}
-            })
-            $(document).unbind('panel:load.' + id, load);
-        }
-        
-        var unload = function(event, panel) {
-            console.log('unload event!', panel, self);
-            if (panel == self) {
-                console.log('unloading panel', self);
-                $(document).unbind('panel:unload.' + id, unload);
-            }
-        };
-        
-        $(document).bind('panel:load.' + id, load);
-        $(document).bind('panel:unload.' + id, unload);
-    })();
+    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() {}
+        })
+    }, function(event, panel) {
+        console.log('unloaded panel', panel);
+    })
 </script>
 </script>