X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/bc6587a11ccc72c7f4bf525f9b37fedc15f8bfa5..73bfaa4bdc8e38ee0a3f52ce5f8d6d6dd2a99a39:/platforma/static/js/models.js diff --git a/platforma/static/js/models.js b/platforma/static/js/models.js old mode 100644 new mode 100755 index c57f4f0f..ba2f3ce3 --- a/platforma/static/js/models.js +++ b/platforma/static/js/models.js @@ -88,10 +88,12 @@ Editor.XMLModel = Editor.Model.extend({ messageCenter.addMessage('success', 'xmlload', 'Wczytałem XML :-)'); }, - loadingFailed: function() { + loadingFailed: function(response) + { if (this.get('state') != 'loading') { alert('erroneous state:', this.get('state')); } + var message = parseXHRError(response); this.set('error', '

Błąd przy ładowaniu XML

'+message+'

'); @@ -218,15 +220,15 @@ Editor.HTMLModel = Editor.Model.extend({ alert('erroneous state:', this.get('state')); } - var message = parseXHRError(response); + var err = parseXHRError(response); - this.set('error', '

Nie udało się wczytać widoku HTML:

' + message); + this.set('error', '

Nie udało się wczytać widoku HTML:

' + err.error_message); this.set('state', 'error'); }, getXMLPart: function(elem, callback) { - var path = elem.attr('wl2o:path'); + var path = elem.attr('x-pointer'); if(!this.xmlParts[path]) this.loadXMLPart(elem, callback); else @@ -235,7 +237,7 @@ Editor.HTMLModel = Editor.Model.extend({ loadXMLPart: function(elem, callback) { - var path = elem.attr('wl2o:path'); + var path = elem.attr('x-pointer'); var self = this; $.ajax({ @@ -244,10 +246,12 @@ Editor.HTMLModel = Editor.Model.extend({ data: { revision: this.get('revision'), user: this.document.get('user'), - part: path + chunk: path + // format: 'nl' }, success: function(data) { self.xmlParts[path] = data; + console.log(data); callback(path, data); }, // TODO: error handling @@ -258,13 +262,13 @@ Editor.HTMLModel = Editor.Model.extend({ }); }, - putXMLPart: function(elem, data) { + putXMLPart: function(elem, data, callback) { var self = this; - var path = elem.attr('wl2o:path'); + var path = elem.attr('x-pointer'); this.xmlParts[path] = data; - this.set('state', 'unsynced'); + this.set('state', 'dirty'); /* re-render the changed fragment */ $.ajax({ @@ -273,10 +277,11 @@ Editor.HTMLModel = Editor.Model.extend({ dataType: 'text; charset=utf-8', data: { fragment: data, - part: path + chunk: path + // format: 'nl' }, success: function(htmldata) { - elem.replaceWith(htmldata); + callback(elem, htmldata); self.set('state', 'dirty'); } }); @@ -462,8 +467,8 @@ Editor.DocumentModel = Editor.Model.extend({ alert('erroneous state:', this.get('state')); } - var message = parseXHRError(response); - this.set('error', '

Nie udało się wczytać dokumentu

'+message+"

"); + var err = parseXHRError(response); + this.set('error', '

Nie udało się wczytać dokumentu

'+err.error_message+"

"); this.set('state', 'error'); }, @@ -517,53 +522,58 @@ Editor.DocumentModel = Editor.Model.extend({ revision: this.get('revision'), user: this.get('user') }, - complete: this.updateCompleted.bind(this), - success: function(data) { - this.set('updateData', data); - console.log("new data:", data) - }.bind(this) + complete: this.updateCompleted.bind(this), }); }, - updateCompleted: function(xhr, textStatus) { - console.log(xhr.status, textStatus); - - if (xhr.status == 200) + updateCompleted: function(xhr, textStatus) + { + console.log(xhr.status, xhr.responseText); + var response = parseXHRResponse(xhr); + if(response.success) { - var udata = this.get('updateData'); - if(udata.timestamp == udata.parent_timestamp) + if( (response.data.result == 'no-op') + || (response.data.timestamp == response.data.parent_timestamp)) { - // no change + if( (response.data.revision) && (response.data.revision != this.get('revision')) ) + { + // we're out of sync + this.set('state', 'unsynced'); + return; + } + messageCenter.addMessage('info', 'doc_update', - 'Nic się nie zmieniło od ostatniej aktualizacji. Po co mam uaktualniać?'); + 'Już posiadasz najbardziej aktualną wersję.'); + this.set('state', 'synced'); + return; + } + + // result: success + this.set('revision', response.data.revision); + this.set('user', response.data.user); + + messageCenter.addMessage('info', 'doc_update', + 'Uaktualnienie dokumentu do wersji ' + response.data.revision); + for (var key in this.contentModels) { + this.contentModels[key].set('revision', this.get('revision') ); + this.contentModels[key].set('state', 'empty'); } - else { - this.set('revision', udata.revision); - this.set('user', udata.user); - messageCenter.addMessage('info', 'doc_update', - 'Uaktualnienie dokumentu do wersji ' + udata.revision); - - for (var key in this.contentModels) { - this.contentModels[key].set('revision', this.get('revision') ); - this.contentModels[key].set('state', 'empty'); - } - } - } else if (xhr.status == 409) { // Konflikt podczas operacji - messageCenter.addMessage('error', 'doc_update', - 'Wystąpił konflikt podczas aktualizacji. Pędź po programistów! :-('); - } else { - messageCenter.addMessage('critical', 'doc_update', - 'Nieoczekiwany błąd. Pędź po programistów! :-('); + + this.set('state', 'synced'); + return; } + + // no success means trouble + messageCenter.addMessage(response.error_level, 'doc_update', + response.error_message); - this.set('state', 'synced'); - this.set('updateData', null); + this.set('state', 'unsynced'); }, merge: function(message) { this.set('state', 'loading'); - messageCenter.addMessage('info', null, + messageCenter.addMessage('info', 'doc_merge', 'Scalam dokument z głównym repozytorium...'); $.ajax({ @@ -584,28 +594,53 @@ Editor.DocumentModel = Editor.Model.extend({ }, mergeCompleted: function(xhr, textStatus) { - console.log(xhr.status, textStatus); - if (xhr.status == 200) { // Sukces - this.set('revision', this.get('updateData').revision); - this.set('user', this.get('updateData').user); - - for (var key in this.contentModels) { - this.contentModels[key].set('revision', this.get('revision')); - this.contentModels[key].set('state', 'empty'); + console.log(xhr.status, xhr.responseText); + var response = parseXHRResponse(xhr); + + if(response.success) { + + if( (response.data.result == 'no-op') || + ( response.data.shared_parent_timestamp + && response.data.shared_timestamp + && (response.data.shared_timestamp == response.data.shared_parent_timestamp)) ) + { + if( (response.data.revision) && (response.data.revision != this.get('revision')) ) + { + // we're out of sync + this.set('state', 'unsynced'); + return; + } + + messageCenter.addMessage('info', 'doc_merge', + 'Twoja aktualna wersja nie różni się od ostatnio zatwierdzonej.'); + this.set('state', 'synced'); + return; } - messageCenter.addMessage('success', null, 'Scaliłem dokument z głównym repozytorium :-)'); - } else if (xhr.status == 202) { // Wygenerowano PullRequest - messageCenter.addMessage('success', null, 'Wysłałem prośbę o scalenie dokumentu z głównym repozytorium.'); - } else if (xhr.status == 204) { // Nic nie zmieniono - messageCenter.addMessage('info', null, 'Nic się nie zmieniło od ostatniego scalenia. Po co mam scalać?'); - } else if (xhr.status == 409) { // Konflikt podczas operacji - messageCenter.addMessage('error', null, 'Wystąpił konflikt podczas scalania. Pędź po programistów! :-('); - } else if (xhr.status == 500) { - messageCenter.addMessage('critical', null, 'Błąd serwera. Pędź po programistów! :-('); + if( response.data.result == 'accepted') + { + messageCenter.addMessage('info', 'doc_merge', + 'Prośba o zatwierdzenie została przyjęta i oczekuję na przyjęcie.'); + this.set('state', 'synced'); + return; + } + + // result: success + this.set('revision', response.data.revision); + this.set('user', response.data.user); + + messageCenter.addMessage('info', 'doc_merge', + 'Twoja wersja dokumentu została zatwierdzona.'); + + this.set('state', 'synced'); + return; } - this.set('state', 'synced'); - this.set('mergeData', null); + + // no success means trouble + messageCenter.addMessage(response.error_level, 'doc_merge', + response.error_message); + + this.set('state', 'unsynced'); }, // For debbuging