X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/03c5ba6e50339d7bc470eb6d7f051483eff1e96b..24c1d259ba4af084959d70c6a1f355d0a57f1191:/platforma/static/js/wiki/wikiapi.js diff --git a/platforma/static/js/wiki/wikiapi.js b/platforma/static/js/wiki/wikiapi.js index d151f9e5..9bf5555a 100644 --- a/platforma/static/js/wiki/wikiapi.js +++ b/platforma/static/js/wiki/wikiapi.js @@ -24,10 +24,14 @@ if (vname == "ajax_document_history") { return "/" + arguments[1] + "/history"; - } + } + + if (vname == "ajax_document_gallery") { + return "/gallery/" + arguments[1]; + } if(vname == "ajax_document_diff") - return "/" + arguments[1] + "/diff/" + arguments[2] + "/" + arguments[3] + return "/" + arguments[1] + "/diff"; console.log("Couldn't reverse match:", vname); return "/404.html"; @@ -41,8 +45,8 @@ this.id = meta.attr('data-document-name'); this.revision = $("*[data-key='revision']", meta).text(); - this.gallery = $("*[data-key='gallery']", meta).text(); - + this.galleryLink = $("*[data-key='gallery']", meta).text(); + this.galleryImages = []; this.text = null; this.has_local_changes = false; @@ -89,6 +93,10 @@ // this._context_lock = -1; // return old; // }; + + WikiDocument.prototype.triggerDocumentChanged = function() { + $(document).trigger('wlapi_document_changed', this); + }; /* * Fetch text of this document. @@ -110,6 +118,7 @@ self.revision = data.revision; self.gallery = data.gallery; changed = true; + self.triggerDocumentChanged(); } self.has_local_changes = false; @@ -142,48 +151,99 @@ params['success'](self, data); }, error: function() { - params['failure'](self, "Nie udało się wczytać treści dokumentu."); + params['failure'](self, "Nie udało się wczytać historii dokumentu."); + } + }); + }; + + WikiDocument.prototype.fetchDiff = function(params) { + /* this doesn't modify anything, so no locks */ + var self = this; + + params = $.extend({ + 'from': self.revision, + 'to': self.revision + }, noops, params); + + $.ajax({ + method: "GET", + url: reverse("ajax_document_diff", self.id), + dataType: 'html', + data: {"from": params['from'], "to": params['to']}, + success: function(data) { + params['success'](self, data); + }, + error: function() { + params['failure'](self, "Nie udało się wczytać porównania wersji."); } }); }; + /* + * Fetch gallery + */ + WikiDocument.prototype.refreshGallery = function(params) { + params = $.extend({}, noops, params); + var self = this; + + $.ajax({ + method: "GET", + url: reverse("ajax_document_gallery", self.galleryLink), + dataType: 'json', + // data: {}, + success: function(data) { + self.galleryImages = data; + params['success'](self, data); + }, + error: function() { + self.galleryImages = []; + params['failure'](self, "

Nie udało się wczytać gallerii pod nazwą: '" + + self.galleryLink + "'.

"); + + } + }); + }; + /* * Set document's text */ - WikiDocument.prototype.setText = function(text) { + WikiDocument.prototype.setText = function(text) { this.text = text; - this.has_local_changes = true; + this.has_local_changes = true; }; /* * Set document's gallery link */ - WikiDocument.prototype.setGallery = function(gallery) { - this.gallery = gallery; + WikiDocument.prototype.setGalleryLink = function(gallery) { + this.galleryLink = gallery; this.has_local_changes = true; }; /* * Save text back to the server */ - WikiDocument.prototype.save = function(comment, success, failure){ + WikiDocument.prototype.save = function(params){ + params = $.extend({}, noops, params); var self = this; - + if (!self.has_local_changes) { - return success(self, "Nie ma zmian do zapisania."); - } + console.log("Abort: no changes."); + return params['success'](self, false, "Nie ma zmian do zapisania."); + }; + + // Serialize form to dictionary + var data = {}; + $.each(params['form'].serializeArray(), function() { + data[this.name] = this.value; + }); - /* you can't set text while some is fetching it (or saving) */ var metaComment = '' + metaComment += '\n\tgallery:' + self.galleryLink; + metaComment += '\n-->\n' - var data = { - name: self.id, - text: self.text, - parent_revision: self.revision, - comment: comment, - }; + data.text = metaComment + self.text; + data.comment = data.comment; $.ajax({ url: reverse("ajax_document_text", self.id), @@ -197,15 +257,27 @@ self.revision = data.revision; self.gallery = data.gallery; changed = true; + self.triggerDocumentChanged(); } - success(self, changed); + params['success'](self, changed, + ((changed && "Udało się zapisać :)") || "Twoja wersja i serwera jest identyczna") ); }, - error: function(){ - failure(self, "Nie udało się zapisać."); + error: function(xhr) { + try { + params['failure'](self, $.parseJSON(xhr.responseText)); + } + catch(e) { + params['failure'](self, {"__message": "

Nie udało się zapisać - błąd serwera.

"}); + }; } }); }; /* end of save() */ + WikiDocument.prototype.setTag = function(params) { + + }; + + $.wikiapi.WikiDocument = WikiDocument; })(jQuery);