X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/b157bbf02932396c65c0aca9638c96200c4665df..96647893c5a1e2c675fc2b1bf1d7ca16fe3253b8:/project/static/js/panels.js diff --git a/project/static/js/panels.js b/project/static/js/panels.js index c53d1354..d04b4212 100644 --- a/project/static/js/panels.js +++ b/project/static/js/panels.js @@ -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() ); }); });