X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/09c2bec530540e51e71822a8269bb994cc144065..78644811ca0c6042212788dc67add42bc41fb74c:/project/static/js/models.js diff --git a/project/static/js/models.js b/project/static/js/models.js deleted file mode 100644 index 5c6b36d4..00000000 --- a/project/static/js/models.js +++ /dev/null @@ -1,415 +0,0 @@ -/*globals Editor fileId SplitView PanelContainerView EditorView FlashView messageCenter*/ -Editor.Model = Editor.Object.extend({ - synced: false, - data: null -}); - - -Editor.ToolbarButtonsModel = Editor.Model.extend({ - className: 'Editor.ToolbarButtonsModel', - buttons: {}, - - init: function() { - this._super(); - }, - - load: function() { - if (!this.get('buttons').length) { - $.ajax({ - url: toolbarUrl, - dataType: 'json', - success: this.loadSucceeded.bind(this) - }); - } - }, - - loadSucceeded: function(data) { - this.set('buttons', data); - } -}); - - -// Stany modelu: -// -// -> error -> loading -// / -// empty -> loading -> synced -> unsynced -> loading -// \ -// -> dirty -> updating -> updated -> synced -// -Editor.XMLModel = Editor.Model.extend({ - _className: 'Editor.XMLModel', - serverURL: null, - data: '', - state: 'empty', - - init: function(serverURL, revision) { - this._super(); - this.set('state', 'empty'); - this.set('revision', revision); - this.serverURL = serverURL; - this.toolbarButtonsModel = new Editor.ToolbarButtonsModel(); - this.addObserver(this, 'data', this.dataChanged.bind(this)); - }, - - load: function(force) { - if (force || this.get('state') == 'empty') { - this.set('state', 'loading'); - $.ajax({ - url: this.serverURL, - dataType: 'text', - data: {revision: this.get('revision')}, - success: this.loadingSucceeded.bind(this), - error: this.loadingFailed.bind(this) - }); - return true; - } - return false; - }, - - loadingSucceeded: function(data) { - if (this.get('state') != 'loading') { - alert('erroneous state:', this.get('state')); - } - this.set('data', data); - this.set('state', 'synced'); - }, - - loadingFailed: function() { - if (this.get('state') != 'loading') { - alert('erroneous state:', this.get('state')); - } - this.set('error', 'Nie udało się załadować panelu'); - this.set('state', 'error'); - }, - - update: function(message) { - if (this.get('state') == 'dirty') { - this.set('state', 'updating'); - - var payload = { - contents: this.get('data'), - revision: this.get('revision') - }; - if (message) { - payload.message = message; - } - - $.ajax({ - url: this.serverURL, - type: 'post', - dataType: 'json', - data: payload, - success: this.updatingSucceeded.bind(this), - error: this.updatingFailed.bind(this) - }); - return true; - } - return false; - }, - - updatingSucceeded: function(data) { - if (this.get('state') != 'updating') { - alert('erroneous state:', this.get('state')); - } - this.set('revision', data.revision); - this.set('state', 'updated'); - }, - - updatingFailed: function() { - if (this.get('state') != 'updating') { - alert('erroneous state:', this.get('state')); - } - messageCenter.addMessage('error', 'Uaktualnienie nie powiodło się', 'Uaktualnienie nie powiodło się'); - this.set('state', 'dirty'); - }, - - // For debbuging - set: function(property, value) { - if (property == 'state') { - console.log(this.description(), ':', property, '=', value); - } - return this._super(property, value); - }, - - dataChanged: function(property, value) { - if (this.get('state') == 'synced') { - this.set('state', 'dirty'); - } - }, - - dispose: function() { - this.removeObserver(this); - this._super(); - } -}); - - -Editor.HTMLModel = Editor.Model.extend({ - _className: 'Editor.HTMLModel', - serverURL: null, - data: '', - state: 'empty', - - init: function(serverURL, revision) { - this._super(); - this.set('state', 'empty'); - this.set('revision', revision); - this.serverURL = serverURL; - }, - - load: function(force) { - if (force || this.get('state') == 'empty') { - this.set('state', 'loading'); - $.ajax({ - url: this.serverURL, - dataType: 'text', - data: {revision: this.get('revision')}, - success: this.loadingSucceeded.bind(this), - error: this.loadingFailed.bind(this) - }); - } - }, - - loadingSucceeded: function(data) { - if (this.get('state') != 'loading') { - alert('erroneous state:', this.get('state')); - } - this.set('data', data); - this.set('state', 'synced'); - }, - - loadingFailed: function() { - if (this.get('state') != 'loading') { - alert('erroneous state:', this.get('state')); - } - this.set('error', 'Nie udało się załadować panelu'); - this.set('state', 'error'); - }, - - // For debbuging - set: function(property, value) { - if (property == 'state') { - console.log(this.description(), ':', property, '=', value); - } - return this._super(property, value); - } -}); - - -Editor.ImageGalleryModel = Editor.Model.extend({ - _className: 'Editor.ImageGalleryModel', - serverURL: null, - data: [], - state: 'empty', - - init: function(serverURL) { - this._super(); - this.set('state', 'empty'); - this.serverURL = serverURL; - // olewać data - this.pages = []; - }, - - load: function(force) { - if (force || this.get('state') == 'empty') { - this.set('state', 'loading'); - $.ajax({ - url: this.serverURL, - dataType: 'json', - success: this.loadingSucceeded.bind(this) - }); - } - }, - - loadingSucceeded: function(data) { - if (this.get('state') != 'loading') { - alert('erroneous state:', this.get('state')); - } - - console.log('galleries:', data); - - if (data.length === 0) { - this.set('data', []); - } else { - console.log('dupa'); - this.set('data', data[0].pages); - } - - this.set('state', 'synced'); - }, - - set: function(property, value) { - if (property == 'state') { - console.log(this.description(), ':', property, '=', value); - } - return this._super(property, value); - } -}); - - -Editor.DocumentModel = Editor.Model.extend({ - _className: 'Editor.DocumentModel', - data: null, // name, text_url, user_revision, latest_shared_rev, parts_url, dc_url, size, merge_url - contentModels: {}, - state: 'empty', - - init: function() { - this._super(); - this.set('state', 'empty'); - this.load(); - }, - - load: function() { - if (this.get('state') == 'empty') { - this.set('state', 'loading'); - $.ajax({ - cache: false, - url: documentsUrl + fileId, - dataType: 'json', - success: this.successfulLoad.bind(this) - }); - } - }, - - successfulLoad: function(data) { - this.set('data', data); - this.set('state', 'synced'); - this.contentModels = { - 'xml': new Editor.XMLModel(data.text_url, data.user_revision), - 'html': new Editor.HTMLModel(data.html_url, data.user_revision), - 'gallery': new Editor.ImageGalleryModel(data.gallery_url) - }; - for (var key in this.contentModels) { - this.contentModels[key].addObserver(this, 'state', this.contentModelStateChanged.bind(this)); - } - }, - - contentModelStateChanged: function(property, value, contentModel) { - if (value == 'dirty') { - this.set('state', 'dirty'); - for (var key in this.contentModels) { - if (this.contentModels[key].guid() != contentModel.guid()) { - this.contentModels[key].set('state', 'unsynced'); - } - } - } else if (value == 'updated') { - this.set('state', 'synced'); - for (key in this.contentModels) { - if (this.contentModels[key].guid() == contentModel.guid()) { - this.contentModels[key].set('state', 'synced'); - this.data.user_revision = this.contentModels[key].get('revision'); - messageCenter.addMessage('info', 'Uaktualnienie dokumentu do wersji ' + this.data.user_revision, - 'Uaktualnienie dokumentu do wersji ' + this.data.user_revision); - } - } - for (key in this.contentModels) { - if (this.contentModels[key].guid() != contentModel.guid()) { - this.contentModels[key].set('revision', this.data.user_revision); - this.contentModels[key].set('state', 'empty'); - } - } - } - }, - - saveDirtyContentModel: function(message) { - for (var key in this.contentModels) { - if (this.contentModels[key].get('state') == 'dirty') { - this.contentModels[key].update(message); - break; - } - } - }, - - update: function() { - this.set('state', 'loading'); - $.ajax({ - url: this.data.merge_url, - dataType: 'json', - type: 'post', - data: { - type: 'update', - target_revision: this.data.user_revision - }, - complete: this.updateCompleted.bind(this), - success: function(data) { this.set('updateData', data); }.bind(this) - }); - }, - - updateCompleted: function(xhr, textStatus) { - console.log(xhr.status, textStatus); - if (xhr.status == 200) { // Sukces - this.data.user_revision = this.get('updateData').revision; - messageCenter.addMessage('info', 'Uaktualnienie dokumentu do wersji ' + this.get('updateData').revision, - 'Uaktualnienie dokumentu do wersji ' + this.get('updateData').revision); - for (var key in this.contentModels) { - this.contentModels[key].set('revision', this.data.user_revision); - this.contentModels[key].set('state', 'empty'); - } - } else if (xhr.status == 202) { // Wygenerowano PullRequest (tutaj?) - } else if (xhr.status == 204) { // Nic nie zmieniono - } else if (xhr.status == 409) { // Konflikt podczas operacji - } - this.set('state', 'synced'); - this.set('updateData', null); - }, - - merge: function(message) { - this.set('state', 'loading'); - $.ajax({ - url: this.data.merge_url, - type: 'post', - dataType: 'json', - data: { - type: 'share', - target_revision: this.data.user_revision, - message: message - }, - complete: this.mergeCompleted.bind(this), - success: function(data) { this.set('mergeData', data); }.bind(this) - }); - }, - - mergeCompleted: function(xhr, textStatus) { - console.log(xhr.status, textStatus); - if (xhr.status == 200) { // Sukces - this.data.user_revision = this.get('mergeData').revision; - for (var key in this.contentModels) { - this.contentModels[key].set('revision', this.data.user_revision); - this.contentModels[key].set('state', 'empty'); - } - messageCenter.addMessage('info', 'Uaktualnienie dokumentu do wersji ' + this.get('mergeData').revision, - 'Uaktualnienie dokumentu do wersji ' + this.get('mergeData').revision); - } else if (xhr.status == 202) { // Wygenerowano PullRequest - } else if (xhr.status == 204) { // Nic nie zmieniono - } else if (xhr.status == 409) { // Konflikt podczas operacji - } - this.set('state', 'synced'); - this.set('mergeData', null); - }, - - // For debbuging - set: function(property, value) { - if (property == 'state') { - console.log(this.description(), ':', property, '=', value); - } - return this._super(property, value); - } -}); - - -var leftPanelView, rightPanelContainer, doc; - -$(function() -{ - documentsUrl = $('#api-base-url').text() + '/'; - toolbarUrl = $('#api-toolbar-url').text(); - - doc = new Editor.DocumentModel(); - var editor = new EditorView('#body-wrap', doc); - editor.freeze(); - var flashView = new FlashView('#flashview', messageCenter); - var splitView = new SplitView('#splitview', doc); - leftPanelView = new PanelContainerView('#left-panel-container', doc); - rightPanelContainer = new PanelContainerView('#right-panel-container', doc); -});