jenkins-bot has submitted this change and it was merged. Change subject: Implement session expiry checking for proofread actions ......................................................................
Implement session expiry checking for proofread actions Breaking changes: * Removed mw.translate.getProofreadToken * Removed mw.translate.proofread The above functions are no longer needed since MediaWiki 1.22 supports postWithToken. There is a bug in postWithToken which I worked around. See Ibe48956a for a suggested fix in core. Tweaked the CSS a little bit to allow tux-warning to show up and tweaked the image height to avoid overlow below the icon. Small refactoring in the code to remove proofread = this and to avoid requering some elements again. Bug: 69314 Change-Id: Icd20eaa58451fc52d550e650afb3016806f664a6 --- M resources/css/ext.translate.proofread.css M resources/js/ext.translate.proofread.js 2 files changed, 29 insertions(+), 113 deletions(-) Approvals: KartikMistry: Looks good to me, approved jenkins-bot: Verified diff --git a/resources/css/ext.translate.proofread.css b/resources/css/ext.translate.proofread.css index 2ca9b9f..2e9c8d4 100644 --- a/resources/css/ext.translate.proofread.css +++ b/resources/css/ext.translate.proofread.css @@ -107,11 +107,14 @@ } .tux-proofread-action { - background: url(../images/check-sprite-ltr.png) right top no-repeat; + background-position: right top; + background-repeat: no-repeat; + background-image: url(../images/check-sprite-ltr.png); background-image: -webkit-linear-gradient(transparent, transparent), url(../images/check-sprite-ltr.svg); /* @embed */ background-image: linear-gradient(transparent, transparent), url(../images/check-sprite-ltr.svg); - height: 31px; + /* There is 1px white row between each icon */ + height: 30px; cursor: pointer; } diff --git a/resources/js/ext.translate.proofread.js b/resources/js/ext.translate.proofread.js index f414439..cac69e6 100644 --- a/resources/js/ext.translate.proofread.js +++ b/resources/js/ext.translate.proofread.js @@ -1,102 +1,6 @@ +/*global alert: false*/ ( function ( $, mw ) { 'use strict'; - - // Cache token so we don't have to keep fetching new ones for every single request. - var cachedToken = null; - - mw.translate = mw.translate || {}; - - mw.translate = $.extend( mw.translate, { - /** - * Post to translation review API with correct token. - * If we have no token, get one and try to post. - * If we have a cached token try using that, and if it fails, blank out the - * cached token and start over. - * - * @param params {Object} API parameters - * @param ok {Function} callback for success - * @param err {Function} [optional] error callback - * @return {jqXHR} - */ - proofread: function ( params, ok, err ) { - var useTokenToPost, getTokenIfBad, promise, - translate = this, - api = new mw.Api(); - - if ( cachedToken === null ) { - // We don't have a valid cached token, so get a fresh one and try posting. - // We do not trap any 'badtoken' or 'notoken' errors, because we don't want - // an infinite loop. If this fresh token is bad, something else is very wrong. - useTokenToPost = function ( token ) { - params.token = token; - api.post( params, ok, err ); - }; - - promise = translate.getProofreadToken( useTokenToPost, err ); - } else { - // We do have a token, but it might be expired. So if it is 'bad' then - // start over with a new token. - params.token = cachedToken; - getTokenIfBad = function ( code, result ) { - if ( code === 'badtoken' ) { - // force a new token, clear any old one - cachedToken = null; - translate.proofread( params, ok, err ); - } else { - err( code, result ); - } - }; - - promise = api.post( params, { - ok: ok, - err: getTokenIfBad - } ); - } - - return promise; - }, - - /** - * Api helper to grab an translationreview token - * - * token callback has signature ( String token ) - * error callback has signature ( String code, Object results, XmlHttpRequest xhr, Exception exception ) - * Note that xhr and exception are only available for 'http_*' errors - * code may be any http_* error code (see mw.Api), or 'token_missing' - * - * @param tokenCallback {Function} received token callback - * @param err {Function} error callback - * @return {jqXHR} - */ - getProofreadToken: function ( tokenCallback, err ) { - var parameters = { - action: 'tokens', - type: 'translationreview' - }, - ok = function ( data ) { - var token; - // If token type is not available for this user, - // key 'translationreviewtoken' is missing or can contain Boolean false - if ( data.tokens && data.tokens.translationreviewtoken ) { - token = data.tokens.translationreviewtoken; - cachedToken = token; - tokenCallback( token ); - } else { - err( 'token-missing', data ); - } - }, - ajaxOptions = { - ok: ok, - err: err, - // Due to the API assuming we're logged out if we pass the callback-parameter, - // we have to disable jQuery's callback system, and instead parse JSON string, - // by setting 'jsonp' to false. - jsonp: false - }; - - return new mw.Api().get( parameters, ajaxOptions ); - } - } ); /** * Proofread Plugin @@ -282,32 +186,41 @@ * Mark this message as proofread. */ proofread: function () { - var proofread = this, - reviews; + var reviews, counter, params, + message = this.message, + $message = this.$message; - mw.translate.proofread( { + params = { action: 'translationreview', revision: this.message.properties.revision, - format: 'json' - }, function () { - proofread.$message.find( '.tux-proofread-action' ) - .addClass( 'accepted' ); + }; - reviews = proofread.$message.find( '.tux-proofread-count' ).data( 'reviewCount' ); - proofread.$message.find( '.tux-proofread-count' ) - .text( mw.language.convertNumber( reviews + 1 ) ); + if ( !mw.user.isAnon() ) { + params.assert = 'user'; + } + + new mw.Api().postWithToken( 'translationreview', params ).done( function () { + $message.find( '.tux-proofread-action' ).addClass( 'accepted' ); + + counter = $message.find( '.tux-proofread-count' ); + reviews = counter.data( 'reviewCount' ); + counter.text( mw.language.convertNumber( reviews + 1 ) ); // Update stats $( '.tux-action-bar .tux-statsbar' ).trigger( 'change', - [ 'proofread', proofread.message.properties.status ] + [ 'proofread', message.properties.status ] ); if ( mw.track ) { - mw.track( 'ext.translate.event.proofread', proofread.message ); + mw.track( 'ext.translate.event.proofread', message ); } - }, function () { - mw.log( 'Error while submitting the message for proofread.' ); + } ).fail( function ( errorCode ) { + $message.find( '.tux-proofread-action' ).addClass( 'tux-warning' ); + // In MW 1.24 alpha postWithToken returns token-missing instead of assertuserfailed + if ( errorCode === 'assertuserfailed' || errorCode === 'token-missing' ) { + alert( mw.msg( 'tux-session-expired' ) ); + } } ); }, -- To view, visit https://gerrit.wikimedia.org/r/156098 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: Icd20eaa58451fc52d550e650afb3016806f664a6 Gerrit-PatchSet: 5 Gerrit-Project: mediawiki/extensions/Translate Gerrit-Branch: master Gerrit-Owner: Nikerabbit <niklas.laxst...@gmail.com> Gerrit-Reviewer: KartikMistry <kartik.mis...@gmail.com> Gerrit-Reviewer: Krinkle <krinklem...@gmail.com> Gerrit-Reviewer: Nikerabbit <niklas.laxst...@gmail.com> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits