X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/c52436a7e25876ee3509df2467c2a9ef33303436..36f6233fd79390ad5af8a1532eac60a0ae57c825:/platforma/static/js/wiki/wikiapi.js diff --git a/platforma/static/js/wiki/wikiapi.js b/platforma/static/js/wiki/wikiapi.js index ac4c5b11..27ab97e2 100644 --- a/platforma/static/js/wiki/wikiapi.js +++ b/platforma/static/js/wiki/wikiapi.js @@ -1,9 +1,11 @@ (function($) { - $.wikiapi = {}; - var noop = function() {}; - var noops = {success: noop, failure: noop}; - + var noop = function() { + }; + var noops = { + success: noop, + failure: noop + }; /* * Return absolute reverse path of given named view. * (at least he have it hard-coded in one place) @@ -11,29 +13,37 @@ * TODO: think of a way, not to hard-code it here ;) * */ - function reverse() { + function reverse() { var vname = arguments[0]; + var base_path = "/documents"; - if(vname == "ajax_document_text") { + if (vname == "ajax_document_text") { var path = "/" + arguments[1] + "/text"; - if (arguments[2] !== undefined) + + if (arguments[2] !== undefined) path += "/" + arguments[2]; - return path; + + return base_path + path; } if (vname == "ajax_document_history") { - return "/" + arguments[1] + "/history"; + + return base_path + "/" + arguments[1] + "/history"; } if (vname == "ajax_document_gallery") { - return "/gallery/" + arguments[1]; + + return base_path + "/gallery/" + arguments[1]; } - if(vname == "ajax_document_diff") - return "/" + arguments[1] + "/diff"; + if (vname == "ajax_document_diff") + return base_path + "/" + arguments[1] + "/diff"; + + if (vname == "ajax_document_addtag") + return base_path + "/" + arguments[1] + "/tags"; - if(vname == "ajax_document_addtag") - return "/" + arguments[1] + "/tags"; + if (vname == "ajax_publish") + return base_path + "/" + arguments[1] + "/publish"; console.log("Couldn't reverse match:", vname); return "/404.html"; @@ -43,38 +53,36 @@ * Document Abstraction */ function WikiDocument(element_id) { - var meta = $('#'+element_id); - + var meta = $('#' + element_id); this.id = meta.attr('data-document-name'); + this.revision = $("*[data-key='revision']", meta).text(); + this.readonly = !!$("*[data-key='readonly']", meta).text(); + this.galleryLink = $("*[data-key='gallery']", meta).text(); this.galleryImages = []; this.text = null; - this.has_local_changes = false; this._lock = -1; this._context_lock = -1; this._lock_count = 0; }; - WikiDocument.prototype.triggerDocumentChanged = function() { $(document).trigger('wlapi_document_changed', this); }; - /* * Fetch text of this document. */ WikiDocument.prototype.fetch = function(params) { params = $.extend({}, noops, params); var self = this; - $.ajax({ method: "GET", url: reverse("ajax_document_text", self.id), + data: {"revision": self.revision}, dataType: 'json', - success: function(data) - { + success: function(data) { var changed = false; if (self.text === null || self.revision !== data.revision) { @@ -93,7 +101,6 @@ } }); }; - /* * Fetch history of this document. * @@ -105,12 +112,14 @@ /* this doesn't modify anything, so no locks */ params = $.extend({}, noops, params); var self = this; - $.ajax({ method: "GET", url: reverse("ajax_document_history", self.id), dataType: 'json', - data: {"from": params['from'], "upto": params['upto']}, + data: { + "from": params['from'], + "upto": params['upto'] + }, success: function(data) { params['success'](self, data); }, @@ -119,21 +128,21 @@ } }); }; - 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']}, + data: { + "from": params['from'], + "to": params['to'] + }, success: function(data) { params['success'](self, data); }, @@ -149,7 +158,6 @@ WikiDocument.prototype.refreshGallery = function(params) { params = $.extend({}, noops, params); var self = this; - $.ajax({ method: "GET", url: reverse("ajax_document_gallery", self.galleryLink), @@ -185,7 +193,7 @@ /* * Save text back to the server */ - WikiDocument.prototype.save = function(params){ + WikiDocument.prototype.save = function(params) { params = $.extend({}, noops, params); var self = this; @@ -204,43 +212,71 @@ metaComment += '\n\tgallery:' + self.galleryLink; metaComment += '\n-->\n' - data.text = metaComment + self.text; - data.comment = data.comment; + data['textsave-text'] = metaComment + self.text; $.ajax({ url: reverse("ajax_document_text", self.id), type: "POST", dataType: "json", data: data, - success: function(data){ + success: function(data) { var changed = false; + if (data.text) { self.text = data.text; self.revision = data.revision; self.gallery = data.gallery; changed = true; self.triggerDocumentChanged(); - } - params['success'](self, changed, - ((changed && "Udało się zapisać :)") || "Twoja wersja i serwera jest identyczna") ); + }; + + params['success'](self, changed, ((changed && "Udało się zapisać :)") || "Twoja wersja i serwera jest identyczna")); }, error: function(xhr) { try { params['failure'](self, $.parseJSON(xhr.responseText)); } - catch(e) { - params['failure'](self, {"__message": "

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

"}); + catch (e) { + params['failure'](self, { + "__message": "

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

" + }); }; + } }); }; /* end of save() */ - WikiDocument.prototype.setTag = function(params) { + WikiDocument.prototype.publish = function(params) { params = $.extend({}, noops, params); var self = this; + $.ajax({ + url: reverse("ajax_publish", self.id), + type: "POST", + dataType: "json", + success: function(data) { + params.success(self, data); + }, + error: function(xhr) { + if (xhr.status == 403 || xhr.status == 401) { + params.failure(self, "Nie masz uprawnień lub nie jesteś zalogowany."); + } + else { + try { + params.failure(self, xhr.responseText); + } + catch (e) { + params.failure(self, "Nie udało się - błąd serwera."); + }; + }; + } + }); + }; + WikiDocument.prototype.setTag = function(params) { + params = $.extend({}, noops, params); + var self = this; var data = { - "id": self.id, + "addtag-id": self.id, }; /* unpack form */ @@ -253,7 +289,7 @@ type: "POST", dataType: "json", data: data, - success: function(data){ + success: function(data) { params.success(self, data.message); }, error: function(xhr) { @@ -277,5 +313,4 @@ }; $.wikiapi.WikiDocument = WikiDocument; - })(jQuery);