d04b4212c23b0a41a1009b87fd4d7b57e71ad504
[redakcja.git] / project / static / js / panels.js
1 function Panel(target) {
2         var self = this;
3         this.target = target;
4         this.instanceId = Math.ceil(Math.random() * 1000000000);
5         $.log('new panel - target: ', this.target);
6         $(document).bind('panel:unload.' + this.instanceId, 
7                         function(event, data) { self.unload(event, data); });   
8 }
9
10 Panel.prototype.load = function (url) {
11     $.log('preparing xhr load: ', this.target);
12     $('.change-notification', $(this.target).parent()).fadeOut();
13     $(document).trigger('panel:unload', this.target);
14         var self = this;
15
16     $.ajax({
17         url: url,
18         dataType: 'html',
19                 success: function(data, tstat) {
20                         load_callback = unload_callback = null;
21                         $(self.target).html(data);
22                         self._onUnload = unload_callback;
23                         
24                         if(load_callback != null) {
25                                 $.log('Invoking panel load callback.');
26                                 load_callback(self);
27                         }
28                 },
29         error: function(request, textStatus, errorThrown) {
30             $.log('ajax', url, this.target, 'error:', textStatus, errorThrown);
31         }
32     });
33 }
34
35 Panel.prototype.unload = function(event, data) {
36         $.log('got unload signal', this.target, ' target: ', data);
37         if(this.target == data) {
38                 $(document).unbind('panel:unload.' + this.instanceId);
39         $(this.target).html('');
40                 if(this._onUnload != null) this._onUnload(this);
41                 return false;
42     };
43 }
44
45
46 /* 
47  * Return the data that should be saved 
48  */
49 Panel.prototype.saveData = function() {
50         return "";
51 }
52
53
54 $(function() {
55     $('#panels').makeHorizPanel({});
56     $('#panels').css('top', ($('#header').outerHeight() ) + 'px');
57
58         $('.panel-content').each(function() {
59                 var ctrl = new Panel(this);
60                 $(this).data('ctrl', ctrl);
61         });
62         
63     $('.panel-toolbar select').change(function() {
64                 var panel = $('.panel-content', $(this).parent().parent());
65                 $(panel).data('ctrl').load( $(this).val() );
66     });
67 });