X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/f499ee9347f539c36f3846fdc41020f2320bae77..d64a8451dafc98e8f71455a55d123d22f3368ef9:/platforma/static/js/wiki/base.js?ds=sidebyside
diff --git a/platforma/static/js/wiki/base.js b/platforma/static/js/wiki/base.js
index 429b0e66..40a29426 100644
--- a/platforma/static/js/wiki/base.js
+++ b/platforma/static/js/wiki/base.js
@@ -1,101 +1,101 @@
-(function($)
-{
+(function($)
+{
var noop = function() { };
-
+
$.wiki = {
perspectives: {},
- cls: {}
+ cls: {}
};
-
- $.wiki.activePerspective = function() {
+
+ $.wiki.activePerspective = function() {
return this.perspectives[$("#tabs li.active").attr('id')];
};
-
+
$.wiki.exitContext = function() {
var ap = this.activePerspective();
if(ap) ap.onExit();
- return ap;
+ return ap;
};
-
+
$.wiki.enterContext = function(ap) {
- if(ap) ap.onEnter();
+ if(ap) ap.onEnter();
};
-
+
$.wiki.isDirty = function() {
var ap = this.activePerspective();
- return (!!CurrentDocument && CurrentDocument.has_local_changes) || ap.dirty();
+ return (!!CurrentDocument && CurrentDocument.has_local_changes) || ap.dirty();
};
-
+
$.wiki.newTab = function(doc, title, klass) {
var base_id = 'id' + Math.floor(Math.random()* 5000000000);
var id = (''+klass)+'_' + base_id;
var $tab = $('
'
+ title + '');
- var $view = $('
');
-
+ var $view = $('
');
+
this.perspectives[id] = new $.wiki[klass]({
doc: doc,
id: id,
base_id: base_id,
- });
-
- $('#tabs').append($tab);
- $view.hide().appendTo('#editor');
+ });
+
+ $('#tabs').append($tab);
+ $view.hide().appendTo('#editor');
return {
tab: $tab[0],
view: $view[0],
- };
+ };
};
-
+
$.wiki.initTab = function(options) {
var klass = $(options.tab).attr('data-ui-jsclass');
-
+
return new $.wiki[klass]({
doc: options.doc,
id: $(options.tab).attr('id'),
callback: function() {
$.wiki.perspectives[this.perspective_id] = this;
if(options.callback)
- options.callback.call(this);
- }
+ options.callback.call(this);
+ }
});
};
-
+
$.wiki.perspectiveForTab = function(tab) { // element or id
return this.perspectives[ $(tab).attr('id')];
}
-
+
$.wiki.switchToTab = function(tab){
var self = this;
var $tab = $(tab);
-
- if($tab.length != 1)
+
+ if($tab.length != 1)
$tab = $(DEFAULT_PERSPECTIVE);
-
+
var $old = $('#tabs li').filter('.active');
-
+
$old.each(function(){
$(this).removeClass('active');
$('#' + $(this).attr('data-ui-related')).hide();
self.perspectives[$(this).attr('id')].onExit();
});
-
+
/* show new */
$tab.addClass('active');
$('#' + $tab.attr('data-ui-related')).show();
-
+
console.log($tab);
console.log($.wiki.perspectives);
-
+
$.wiki.perspectives[$tab.attr('id')].onEnter();
};
-
+
/*
* Basic perspective.
*/
$.wiki.Perspective = function(options) {
if(!options) return;
-
+
this.doc = options.doc;
if (options.id) {
this.perspective_id = options.id;
@@ -103,121 +103,126 @@
else {
this.perspective_id = '';
}
-
+
if(options.callback)
options.callback.call(this);
};
-
+
$.wiki.Perspective.prototype.toString = function() {
return this.perspective_id;
};
-
+
$.wiki.Perspective.prototype.dirty = function() {
return true;
};
-
+
$.wiki.Perspective.prototype.onEnter = function () {
// called when perspective in initialized
if (this.perspective_id) {
document.location.hash = '#' + this.perspective_id;
}
-
+
console.log(document.location.hash);
};
-
+
$.wiki.Perspective.prototype.onExit = function () {
- // called when user switches to another perspective
+ // called when user switches to another perspective
document.location.hash = '';
- };
-
+ };
+
$.wiki.Perspective.prototype.destroy = function() {
- // pass
+ // pass
};
-
+
$.wiki.Perspective.prototype.freezeState = function () {
// free UI state (don't store data here)
};
-
+
$.wiki.Perspective.prototype.unfreezeState = function (frozenState) {
// restore UI state
};
-
+
/*
* Stub rendering (used in generating history)
*/
- $.wiki.renderStub = function($container, $stub, data)
+ $.wiki.renderStub = function(params)
{
- var $elem = $stub.clone();
+ params = $.extend({ 'filters': {} }, params);
+ var $elem = params.stub.clone();
$elem.removeClass('row-stub');
- $container.append($elem);
-
+ params.container.append($elem);
+
$('*[data-stub-value]', $elem).each(function() {
var $this = $(this);
var field = $this.attr('data-stub-value');
- var value = data[field];
-
+
+ var value = params.data[field];
+
+ if(params.filters[field])
+ value = params.filters[field](value);
+
if(value === null || value === undefined) return;
-
+
if(!$this.attr('data-stub-target')) {
- $this.text(value);
- }
+ $this.text(value);
+ }
else {
$this.attr($this.attr('data-stub-target'), value);
$this.removeAttr('data-stub-target');
- $this.removeAttr('data-stub-value');
- }
+ $this.removeAttr('data-stub-value');
+ }
});
-
+
$elem.show();
- return $elem;
+ return $elem;
};
-
+
/*
* Dialogs
*/
function GenericDialog(element) {
if(!element) return;
-
+
var self = this;
-
+
self.$elem = $(element);
-
+
if(!self.$elem.attr('data-ui-initialized')) {
console.log("Initializing dialog", this);
self.initialize();
- self.$elem.attr('data-ui-initialized', true);
+ self.$elem.attr('data-ui-initialized', true);
}
-
- self.show();
+
+ self.show();
};
-
+
GenericDialog.prototype = {
-
+
/*
* Steps to follow when the dialog in first loaded on page.
*/
initialize: function(){
var self = this;
-
+
/* bind buttons */
$('button[data-ui-action]', self.$elem).click(function(event) {
event.preventDefault();
-
+
var action = $(this).attr('data-ui-action');
console.log("Button pressed, action: ", action);
-
+
try {
self[action + "Action"].call(self);
} catch(e) {
console.log("Action failed:", e);
// always hide on cancel
if(action == 'cancel')
- self.hide();
- }
- });
+ self.hide();
+ }
+ });
},
-
- /*
+
+ /*
* Prepare dialog for user. Clear any unnessary data.
*/
show: function() {
@@ -230,61 +235,61 @@
}
});
},
-
+
hide: function(){
$.unblockUI();
},
-
+
cancelAction: function() {
- this.hide();
+ this.hide();
},
-
+
doneAction: function() {
this.hide();
},
-
+
clearForm: function() {
$("*[data-ui-error-for]", this.$elem).text('');
},
-
+
reportErrors: function(errors) {
var global = $("*[data-ui-error-for='__all__']", this.$elem);
var unassigned = [];
-
- for (var field_name in errors)
- {
+
+ for (var field_name in errors)
+ {
var span = $("*[data-ui-error-for='"+field_name+"']", this.$elem);
-
+
if(!span.length) {
unassigned.push(field_name);
continue;
}
-
- span.text(errors[field_name].join(' '));
+
+ span.text(errors[field_name].join(' '));
}
-
+
if(unassigned.length > 0)
global.text( global.text() + 'W formularzu wystÄ
piÅy bÅÄdy');
- }
- };
-
- $.wiki.cls.GenericDialog = GenericDialog;
-
- $.wiki.showDialog = function(selector) {
+ }
+ };
+
+ $.wiki.cls.GenericDialog = GenericDialog;
+
+ $.wiki.showDialog = function(selector, options) {
var elem = $(selector);
-
+
if(elem.length != 1) {
console.log("Failed to show dialog:", selector, elem);
- return false;
+ return false;
}
-
- try {
- var klass = elem.attr('data-ui-jsclass')
- return new $.wiki.cls[klass](elem);
+
+ try {
+ var klass = elem.attr('data-ui-jsclass');
+ return new $.wiki.cls[klass](elem, options);
} catch(e) {
console.log("Failed to show dialog", selector, klass, e);
return false;
- }
+ }
};
-
+
})(jQuery);