4 var noop = function() {};
5 var noops = {success: noop, failure: noop};
8 * Return absolute reverse path of given named view.
9 * (at least he have it hard-coded in one place)
11 * TODO: think of a way, not to hard-code it here ;)
15 var vname = arguments[0];
17 if(vname == "ajax_document_text") {
18 var path = "/" + arguments[1] + "/text";
19 if (arguments[2] !== undefined)
20 path += "/" + arguments[2];
24 if (vname == "ajax_document_history") {
25 return "/" + arguments[1] + "/history";
28 if (vname == "ajax_document_gallery") {
29 return "/gallery/" + arguments[1];
32 if(vname == "ajax_document_diff")
33 return "/" + arguments[1] + "/diff";
35 if(vname == "ajax_document_addtag")
36 return "/" + arguments[1] + "/tags";
38 console.log("Couldn't reverse match:", vname);
43 * Document Abstraction
45 function WikiDocument(element_id) {
46 var meta = $('#'+element_id);
48 this.id = meta.attr('data-document-name');
49 this.revision = $("*[data-key='revision']", meta).text();
50 this.galleryLink = $("*[data-key='gallery']", meta).text();
51 this.galleryImages = [];
54 this.has_local_changes = false;
56 this._context_lock = -1;
61 WikiDocument.prototype.triggerDocumentChanged = function() {
62 $(document).trigger('wlapi_document_changed', this);
66 * Fetch text of this document.
68 WikiDocument.prototype.fetch = function(params) {
69 params = $.extend({}, noops, params);
74 url: reverse("ajax_document_text", self.id),
76 success: function(data)
80 if (self.text === null || self.revision !== data.revision) {
81 self.text = data.text;
82 self.revision = data.revision;
83 self.gallery = data.gallery;
85 self.triggerDocumentChanged();
88 self.has_local_changes = false;
89 params['success'](self, changed);
92 params['failure'](self, "Nie udało się wczytać treści dokumentu.");
98 * Fetch history of this document.
100 * from - First revision to fetch (default = 0)
101 * upto - Last revision to fetch (default = tip)
104 WikiDocument.prototype.fetchHistory = function(params) {
105 /* this doesn't modify anything, so no locks */
106 params = $.extend({}, noops, params);
111 url: reverse("ajax_document_history", self.id),
113 data: {"from": params['from'], "upto": params['upto']},
114 success: function(data) {
115 params['success'](self, data);
118 params['failure'](self, "Nie udało się wczytać historii dokumentu.");
123 WikiDocument.prototype.fetchDiff = function(params) {
124 /* this doesn't modify anything, so no locks */
128 'from': self.revision,
134 url: reverse("ajax_document_diff", self.id),
136 data: {"from": params['from'], "to": params['to']},
137 success: function(data) {
138 params['success'](self, data);
141 params['failure'](self, "Nie udało się wczytać porównania wersji.");
149 WikiDocument.prototype.refreshGallery = function(params) {
150 params = $.extend({}, noops, params);
155 url: reverse("ajax_document_gallery", self.galleryLink),
158 success: function(data) {
159 self.galleryImages = data;
160 params['success'](self, data);
163 self.galleryImages = [];
164 params['failure'](self, "<p>Nie udało się wczytać gallerii pod nazwą: '" + self.galleryLink + "'.</p>");
170 * Set document's text
172 WikiDocument.prototype.setText = function(text) {
174 this.has_local_changes = true;
178 * Set document's gallery link
180 WikiDocument.prototype.setGalleryLink = function(gallery) {
181 this.galleryLink = gallery;
182 this.has_local_changes = true;
186 * Save text back to the server
188 WikiDocument.prototype.save = function(params){
189 params = $.extend({}, noops, params);
192 if (!self.has_local_changes) {
193 console.log("Abort: no changes.");
194 return params['success'](self, false, "Nie ma zmian do zapisania.");
197 // Serialize form to dictionary
199 $.each(params['form'].serializeArray(), function() {
200 data[this.name] = this.value;
203 var metaComment = '<!--';
204 metaComment += '\n\tgallery:' + self.galleryLink;
205 metaComment += '\n-->\n'
207 data.text = metaComment + self.text;
208 data.comment = data.comment;
211 url: reverse("ajax_document_text", self.id),
215 success: function(data){
218 self.text = data.text;
219 self.revision = data.revision;
220 self.gallery = data.gallery;
222 self.triggerDocumentChanged();
224 params['success'](self, changed,
225 ((changed && "Udało się zapisać :)") || "Twoja wersja i serwera jest identyczna") );
227 error: function(xhr) {
229 params['failure'](self, $.parseJSON(xhr.responseText));
232 params['failure'](self, {"__message": "<p>Nie udało się zapisać - błąd serwera.</p>"});
236 }; /* end of save() */
238 WikiDocument.prototype.setTag = function(params) {
239 params = $.extend({}, noops, params);
247 $.each(params.form.serializeArray(), function() {
248 data[this.name] = this.value;
252 url: reverse("ajax_document_addtag", self.id),
256 success: function(data){
257 params.success(self, data.message);
259 error: function(xhr) {
260 if (xhr.status == 403 || xhr.status == 401) {
261 params.failure(self, {
262 "__all__": ["Nie masz uprawnień lub nie jesteś zalogowany."]
267 params.failure(self, $.parseJSON(xhr.responseText));
270 params.failure(self, {
271 "__all__": ["Nie udało się - błąd serwera."]
279 $.wikiapi.WikiDocument = WikiDocument;