--- /dev/null
+$(function()
+{
+ function saveToBranch(data) {
+ $.log('Saving to local branch');
+ var changed_panel = $('.panel-wrap.changed');
+
+ if( changed_panel.length == 0)
+ return; /* no changes */
+
+ if( changed_panel.length > 1)
+ alert('Błąd: więcej niż jeden panel został zmodyfikowany. Nie można zapisać.');
+
+ save_data = changed_panel.data('ctrl').saveData();
+
+ $.ajax({
+ url: location.href,
+ dataType: 'json',
+ success: function(data, textStatus) {
+ $.log('Success:', data);
+ },
+ error: function(rq, tstat, err) {
+ $.log('save error', rq, tstat, err);
+ },
+ type: 'POST',
+ data: save_data
+ });
+ }
+
+ $('#toolbar-button-save').click(saveToBranch);
+});
+
-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() );
});
});
{{ html|safe }}
<script type="text/javascript" charset="utf-8">
- (function() {
- var id = Math.ceil(Math.random() * 1000000000);
-
- panel(function(event, me) {
- $(document).bind('panel:contentChanged.' + id, function(event, p) {
- $('.change-notification', $(me).parent()).fadeIn();
- });
- $(me).addClass('panel-htmleditor');
- }, function(event, me) {
+(function() {
+
+var id = Math.ceil(Math.random() * 1000000000);
+
+load_callback = function(panel) {
+ $(document).bind('panel:contentChanged.' + id, function(event, p) {
+ $('.change-notification', $(this).parent()).fadeIn();
+ });
+ $(this).addClass('panel-htmleditor');
+}
+
+unload_callback = function(panel) {
$(me).removeClass('panel-htmleditor');
$(document).unbind('panel:contentChanged.' + id);
- });
- })()
+}
+
+})();
</script>