Esanders has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/354869 )

Change subject: Move getWikitextFragment up to Target from ArticleTarget
......................................................................

Move getWikitextFragment up to Target from ArticleTarget

Any MW target may want to get a wikitext fragment, not just
ArticleTargets. Requires us to move refreshEditToken up as well.

Change-Id: I27d30e20fefd5ba266d3d8e5f99383e9b4d4993a
---
M modules/ve-mw/init/ve.init.mw.ArticleTarget.js
M modules/ve-mw/init/ve.init.mw.Target.js
2 files changed, 118 insertions(+), 117 deletions(-)


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

diff --git a/modules/ve-mw/init/ve.init.mw.ArticleTarget.js 
b/modules/ve-mw/init/ve.init.mw.ArticleTarget.js
index 0934b92..700954f 100644
--- a/modules/ve-mw/init/ve.init.mw.ArticleTarget.js
+++ b/modules/ve-mw/init/ve.init.mw.ArticleTarget.js
@@ -58,7 +58,6 @@
 
        this.restoring = !!this.requestedRevId && this.requestedRevId !== 
this.currentRevisionId;
        this.pageDeletedWarning = false;
-       this.editToken = mw.user.tokens.get( 'editToken' );
        this.submitUrl = ( new mw.Uri( mw.util.getUrl( this.pageName ) ) )
                .extend( {
                        action: 'submit',
@@ -643,68 +642,6 @@
 
        // Handle (other) unknown and/or unrecoverable errors
        this.saveErrorUnknown( editApi, data );
-};
-
-/**
- * Refresh our stored edit/csrf token
- *
- * This should be called in response to a badtoken error, to resolve whether 
the
- * token was expired / the user changed. If the user did change, this updates
- * the current user.
- *
- * @return {jQuery.Promise} Promise resolved with whether we switched users
- */
-ve.init.mw.ArticleTarget.prototype.refreshEditToken = function () {
-       var api = new mw.Api(),
-               deferred = $.Deferred(),
-               target = this;
-       api.get( {
-               action: 'query',
-               meta: 'tokens|userinfo',
-               type: 'csrf'
-       } )
-               .done( function ( data ) {
-                       var
-                               userInfo = data.query && data.query.userinfo,
-                               editToken = data.query && data.query.tokens && 
data.query.tokens.csrftoken,
-                               isAnon = mw.user.isAnon();
-
-                       if ( userInfo && editToken ) {
-                               target.editToken = editToken;
-
-                               if (
-                                       ( isAnon && userInfo.anon !== undefined 
) ||
-                                               // Comparing id instead of name 
to protect against possible
-                                               // normalisation and against 
case where the user got renamed.
-                                               mw.config.get( 'wgUserId' ) === 
userInfo.id
-                               ) {
-                                       // New session is the same user still
-                                       deferred.resolve( false );
-                               } else {
-                                       // The now current session is a 
different user
-                                       if ( userInfo.anon !== undefined ) {
-                                               // New session is an anonymous 
user
-                                               mw.config.set( {
-                                                       // wgUserId is unset 
for anonymous users, not set to null
-                                                       wgUserId: undefined,
-                                                       // wgUserName is 
explicitly set to null for anonymous users,
-                                                       // functions like 
mw.user.isAnon rely on this.
-                                                       wgUserName: null
-                                               } );
-                                       } else {
-                                               // New session is a different 
user
-                                               mw.config.set( { wgUserId: 
userInfo.id, wgUserName: userInfo.name } );
-                                       }
-                                       deferred.resolve( true );
-                               }
-                       } else {
-                               deferred.reject();
-                       }
-               } )
-               .fail( function () {
-                       deferred.reject();
-               } );
-       return deferred.promise();
 };
 
 /**
@@ -2382,58 +2319,4 @@
                true /* non-cancellable */
        );
        this.load( dataPromise );
-};
-
-/**
- * Get a wikitext fragment from a document
- *
- * @param {ve.dm.Document} doc Document
- * @param {boolean} [useRevision=true] Whether to use the revision ID + ETag
- * @param {boolean} [isRetry=false] Whether this call is retrying a prior call
- * @return {jQuery.Promise} Abortable promise which resolves with a wikitext 
string
- */
-ve.init.mw.ArticleTarget.prototype.getWikitextFragment = function ( doc, 
useRevision, isRetry ) {
-       var promise, xhr,
-               target = this,
-               params = {
-                       action: 'visualeditoredit',
-                       token: this.editToken,
-                       paction: 'serialize',
-                       html: ve.dm.converter.getDomFromModel( doc 
).body.innerHTML,
-                       page: this.pageName
-               };
-
-       // Optimise as a no-op
-       if ( params.html === '' ) {
-               return '';
-       }
-
-       if ( useRevision === undefined || useRevision ) {
-               params.oldid = this.revid;
-               params.etag = this.etag;
-       }
-
-       xhr = new mw.Api().post(
-               params,
-               { contentType: 'multipart/form-data' }
-       );
-
-       promise = xhr.then( function ( response ) {
-               if ( response.visualeditoredit ) {
-                       return response.visualeditoredit.content;
-               }
-               return $.Deferred().reject();
-       }, function ( error ) {
-               if ( error === 'badtoken' && !isRetry ) {
-                       return target.refreshEditToken().then( function () {
-                               return target.getWikitextFragment( doc, 
useRevision, true );
-                       } );
-               }
-       } );
-
-       promise.abort = function () {
-               xhr.abort();
-       };
-
-       return promise;
 };
diff --git a/modules/ve-mw/init/ve.init.mw.Target.js 
b/modules/ve-mw/init/ve.init.mw.Target.js
index b2ceebd..0404e36 100644
--- a/modules/ve-mw/init/ve.init.mw.Target.js
+++ b/modules/ve-mw/init/ve.init.mw.Target.js
@@ -19,6 +19,8 @@
        ve.init.mw.Target.super.call( this, config );
 
        this.active = false;
+       this.pageName = mw.config.get( 'wgRelevantPageName' );
+       this.editToken = mw.user.tokens.get( 'editToken' );
 
        // Initialization
        this.$element.addClass( 've-init-mw-target' );
@@ -394,3 +396,119 @@
        // Parent method
        ve.init.mw.Target.super.prototype.setSurface.apply( this, arguments );
 };
+
+/**
+ * Refresh our stored edit/csrf token
+ *
+ * This should be called in response to a badtoken error, to resolve whether 
the
+ * token was expired / the user changed. If the user did change, this updates
+ * the current user.
+ *
+ * @return {jQuery.Promise} Promise resolved with whether we switched users
+ */
+ve.init.mw.Target.prototype.refreshEditToken = function () {
+       var api = new mw.Api(),
+               deferred = $.Deferred(),
+               target = this;
+       api.get( {
+               action: 'query',
+               meta: 'tokens|userinfo',
+               type: 'csrf'
+       } )
+               .done( function ( data ) {
+                       var
+                               userInfo = data.query && data.query.userinfo,
+                               editToken = data.query && data.query.tokens && 
data.query.tokens.csrftoken,
+                               isAnon = mw.user.isAnon();
+
+                       if ( userInfo && editToken ) {
+                               target.editToken = editToken;
+
+                               if (
+                                       ( isAnon && userInfo.anon !== undefined 
) ||
+                                               // Comparing id instead of name 
to protect against possible
+                                               // normalisation and against 
case where the user got renamed.
+                                               mw.config.get( 'wgUserId' ) === 
userInfo.id
+                               ) {
+                                       // New session is the same user still
+                                       deferred.resolve( false );
+                               } else {
+                                       // The now current session is a 
different user
+                                       if ( userInfo.anon !== undefined ) {
+                                               // New session is an anonymous 
user
+                                               mw.config.set( {
+                                                       // wgUserId is unset 
for anonymous users, not set to null
+                                                       wgUserId: undefined,
+                                                       // wgUserName is 
explicitly set to null for anonymous users,
+                                                       // functions like 
mw.user.isAnon rely on this.
+                                                       wgUserName: null
+                                               } );
+                                       } else {
+                                               // New session is a different 
user
+                                               mw.config.set( { wgUserId: 
userInfo.id, wgUserName: userInfo.name } );
+                                       }
+                                       deferred.resolve( true );
+                               }
+                       } else {
+                               deferred.reject();
+                       }
+               } )
+               .fail( function () {
+                       deferred.reject();
+               } );
+       return deferred.promise();
+};
+
+/**
+ * Get a wikitext fragment from a document
+ *
+ * @param {ve.dm.Document} doc Document
+ * @param {boolean} [useRevision=true] Whether to use the revision ID + ETag
+ * @param {boolean} [isRetry=false] Whether this call is retrying a prior call
+ * @return {jQuery.Promise} Abortable promise which resolves with a wikitext 
string
+ */
+ve.init.mw.Target.prototype.getWikitextFragment = function ( doc, useRevision, 
isRetry ) {
+       var promise, xhr,
+               target = this,
+               params = {
+                       action: 'visualeditoredit',
+                       token: this.editToken,
+                       paction: 'serialize',
+                       html: ve.dm.converter.getDomFromModel( doc 
).body.innerHTML,
+                       page: this.pageName
+               };
+
+       // Optimise as a no-op
+       if ( params.html === '' ) {
+               return '';
+       }
+
+       if ( useRevision === undefined || useRevision ) {
+               params.oldid = this.revid;
+               params.etag = this.etag;
+       }
+
+       xhr = new mw.Api().post(
+               params,
+               { contentType: 'multipart/form-data' }
+       );
+
+       promise = xhr.then( function ( response ) {
+               if ( response.visualeditoredit ) {
+                       return response.visualeditoredit.content;
+               }
+               return $.Deferred().reject();
+       }, function ( error ) {
+               if ( error === 'badtoken' && !isRetry ) {
+                       return target.refreshEditToken().then( function () {
+                               return target.getWikitextFragment( doc, 
useRevision, true );
+                       } );
+               }
+       } );
+
+       promise.abort = function () {
+               xhr.abort();
+       };
+
+       return promise;
+};

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

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

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

Reply via email to