Merge branch 'master' of git@stigma:platforma
[redakcja.git] / project / static / js / panels.js
index c53d135..d04b421 100644 (file)
@@ -1,46 +1,67 @@
-function loadPanel(target, url) {
-    $.log('ajax', url, 'into', target);
-    $('.change-notification', $(target).parent()).fadeOut();
-    $(document).trigger('panel:unload', target);
+function Panel(target) {
+       var self = this;
+       this.target = target;
+       this.instanceId = Math.ceil(Math.random() * 1000000000);
+       $.log('new panel - target: ', this.target);
+       $(document).bind('panel:unload.' + this.instanceId, 
+                       function(event, data) { self.unload(event, data); });   
+}
+
+Panel.prototype.load = function (url) {
+    $.log('preparing xhr load: ', this.target);
+    $('.change-notification', $(this.target).parent()).fadeOut();
+    $(document).trigger('panel:unload', this.target);
+       var self = this;
+
     $.ajax({
         url: url,
         dataType: 'html',
-        success: function(data, textStatus) {
-            $(target).html(data);
-            $(document).trigger('panel:load', target);
-        },
+               success: function(data, tstat) {
+                       load_callback = unload_callback = null;
+                       $(self.target).html(data);
+                       self._onUnload = unload_callback;
+                       
+                       if(load_callback != null) {
+                               $.log('Invoking panel load callback.');
+                               load_callback(self);
+                       }
+               },
         error: function(request, textStatus, errorThrown) {
-            $.log('ajax', url, target, 'error:', textStatus, errorThrown);
+            $.log('ajax', url, this.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);
-            $(panel).html('');
-            unload(event, panel);
-            return false;
-        }
+Panel.prototype.unload = function(event, data) {
+       $.log('got unload signal', this.target, ' target: ', data);
+       if(this.target == data) {
+               $(document).unbind('panel:unload.' + this.instanceId);
+        $(this.target).html('');
+               if(this._onUnload != null) this._onUnload(this);
+               return false;
     };
-    
-    $(document).one('panel:load', function(event, panel) {
-        self = panel;
-        $(document).bind('panel:unload.' + eventId, unloadHandler);
-        load(event, panel);
-    });
 }
 
+
+/* 
+ * Return the data that should be saved 
+ */
+Panel.prototype.saveData = function() {
+       return "";
+}
+
+
 $(function() {
     $('#panels').makeHorizPanel({});
     $('#panels').css('top', ($('#header').outerHeight() ) + 'px');
+
+       $('.panel-content').each(function() {
+               var ctrl = new Panel(this);
+               $(this).data('ctrl', ctrl);
+       });
        
     $('.panel-toolbar select').change(function() {
-        loadPanel($('.panel-content', $(this).parent().parent()), $(this).val())
+               var panel = $('.panel-content', $(this).parent().parent());
+               $(panel).data('ctrl').load( $(this).val() );
     });
 });