Krinkle has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/73446


Change subject: (DRAFT) mw.ViewPageTarget: Refetch token if session expired
......................................................................

(DRAFT) mw.ViewPageTarget: Refetch token if session expired

Bug: 50424
Change-Id: Id055eca1886f85aeaf615f645de29898afc0373c
---
M VisualEditor.php
M modules/ve-mw/init/targets/ve.init.mw.ViewPageTarget.js
2 files changed, 42 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/VisualEditor 
refs/changes/46/73446/1

diff --git a/VisualEditor.php b/VisualEditor.php
index ed239a6..1a53123 100644
--- a/VisualEditor.php
+++ b/VisualEditor.php
@@ -204,6 +204,7 @@
                        'jquery.client',
                        'jquery.placeholder',
                        'jquery.visibleText',
+                       'mediawiki.api',
                        'mediawiki.feedback',
                        'mediawiki.jqueryMsg',
                        'mediawiki.notify',
diff --git a/modules/ve-mw/init/targets/ve.init.mw.ViewPageTarget.js 
b/modules/ve-mw/init/targets/ve.init.mw.ViewPageTarget.js
index a239f3a..926f224 100644
--- a/modules/ve-mw/init/targets/ve.init.mw.ViewPageTarget.js
+++ b/modules/ve-mw/init/targets/ve.init.mw.ViewPageTarget.js
@@ -432,7 +432,9 @@
  * @param {Object|null} data API response data
   */
 ve.init.mw.ViewPageTarget.prototype.onSaveError = function ( jqXHR, status, 
data ) {
-       var editApi;
+       var api, editApi,
+               viewPage = this;
+
        this.saveDialogSaveButton.setDisabled( false );
        this.$saveDialogLoadingIcon.hide();
 
@@ -487,6 +489,7 @@
 
        // Handle token errors
        if ( data.error && data.error.code === 'badtoken' ) {
+               api = new mw.Api();
                this.showMessage(
                        'api-save-error',
                        document.createTextNode( mw.msg( 
'visualeditor-savedialog-error-badtoken' ) ),
@@ -495,6 +498,36 @@
                        }
                );
                this.saveDialogSaveButton.setDisabled( true );
+               this.$saveDialogLoadingIcon.show();
+               $.when(
+                       api.get( { 'action': 'query', 'meta': 'userinfo' } ),
+                       api.get( { 'action': 'tokens', 'type': 'edit' } )
+               )
+                       .done( function ( d1, d2 ) {
+                               var userInfo = d1 && d1.query && 
d1.query.userinfo,
+                                       editToken = d2 && d2.tokens && 
d2.tokens.edittoken;
+
+                               if ( userInfo && editToken ) {
+                                       mw.user.tokens.set( 'editToken', 
editToken );
+                                       viewPage.editToken = editToken;
+
+                                       if ( true ) {
+                                               // New session is the same user 
still
+                                               viewPage.saveDocument();
+                                       } else {
+                                               // The now current session is a 
different user
+                                               if ( true ) {
+                                                       // New session is an 
anonymous user
+                                               } else {
+                                                       // New session is a 
different user
+                                               }
+                                       }
+
+                               }
+                       } )
+                       .always( function () {
+                               viewPage.$saveDialogLoadingIcon.hide();
+                       } );
                return;
        }
 
@@ -735,6 +768,13 @@
  * @method
  */
 ve.init.mw.ViewPageTarget.prototype.onSaveDialogSaveButtonClick = function () {
+       this.saveDocument();
+};
+
+/**
+ * Try to save the current document.
+ */
+ve.init.mw.ViewPageTarget.prototype.saveDocument = function () {
        var doc = this.surface.getModel().getDocument(),
                saveOptions = this.getSaveOptions();
 

-- 
To view, visit https://gerrit.wikimedia.org/r/73446
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id055eca1886f85aeaf615f645de29898afc0373c
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/VisualEditor
Gerrit-Branch: master
Gerrit-Owner: Krinkle <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to