Nikerabbit has uploaded a new change for review.
https://gerrit.wikimedia.org/r/278461
Change subject: Use localstorage for recent groups on Special:Translate
......................................................................
Use localstorage for recent groups on Special:Translate
* Saves a request to the server when accessed.
* Avoids writes on GET requests and user preference overhead.
* Allows recent groups for anonymous users as well.
* Recent tab is now hidden if no recent groups were provided.
* Avoids "CAS update failed on user_touched" exceptions.
Bug: T95753
Change-Id: I9f42278a3d61e2cbbf3157a0446ec395939c73c0
---
M Autoload.php
M Resources.php
M Translate.php
D api/ApiTranslateUser.php
M i18n/api/en.json
M i18n/api/qqq.json
M resources/js/ext.translate.groupselector.js
A resources/js/ext.translate.recentgroups.js
M resources/js/ext.translate.special.translate.js
M specials/SpecialTranslate.php
10 files changed, 58 insertions(+), 111 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Translate
refs/changes/61/278461/1
diff --git a/Autoload.php b/Autoload.php
index 3fa0f78..4f775a0 100644
--- a/Autoload.php
+++ b/Autoload.php
@@ -210,7 +210,6 @@
$al['ApiTTMServer'] = "$dir/api/ApiTTMServer.php";
$al['ApiSearchTranslations'] = "$dir/api/ApiSearchTranslations.php";
$al['ApiTranslateSandbox'] = "$dir/api/ApiTranslateSandbox.php";
-$al['ApiTranslateUser'] = "$dir/api/ApiTranslateUser.php";
$al['ApiTranslationAids'] = "$dir/api/ApiQueryTranslationAids.php";
$al['ApiTranslationReview'] = "$dir/api/ApiTranslationReview.php";
$al['ApiTranslationStash'] = "$dir/api/ApiTranslationStash.php";
diff --git a/Resources.php b/Resources.php
index 8fbbc4e..38a3916 100644
--- a/Resources.php
+++ b/Resources.php
@@ -265,6 +265,10 @@
),
) + $resourcePaths;
+$wgResourceModules['ext.translate.recentgroups'] = array(
+ 'scripts' => 'resources/js/ext.translate.recentgroups.js',
+) + $resourcePaths;
+
$wgResourceModules['ext.translate.selecttoinput'] = array(
'scripts' => 'resources/js/ext.translate.selecttoinput.js',
) + $resourcePaths;
@@ -448,6 +452,7 @@
'ext.translate.groupselector',
'ext.translate.messagetable',
'ext.translate.navitoggle',
+ 'ext.translate.recentgroups',
'ext.translate.workflowselector',
'ext.uls.mediawiki',
'mediawiki.Uri',
diff --git a/Translate.php b/Translate.php
index 9b02e73..8b2619e 100644
--- a/Translate.php
+++ b/Translate.php
@@ -90,7 +90,6 @@
$wgAPIModules['aggregategroups'] = 'ApiAggregateGroups';
$wgAPIModules['groupreview'] = 'ApiGroupReview';
$wgAPIModules['translatesandbox'] = 'ApiTranslateSandbox';
-$wgAPIModules['translateuser'] = 'ApiTranslateUser';
$wgAPIModules['translationaids'] = 'ApiTranslationAids';
$wgAPIModules['translationreview'] = 'ApiTranslationReview';
$wgAPIModules['translationstash'] = 'ApiTranslationStash';
diff --git a/api/ApiTranslateUser.php b/api/ApiTranslateUser.php
deleted file mode 100644
index d799edd..0000000
--- a/api/ApiTranslateUser.php
+++ /dev/null
@@ -1,70 +0,0 @@
-<?php
-/**
- * API module.
- * @file
- * @author Niklas Laxström
- * @license GPL-2.0+
- */
-
-/**
- * API module for collecting and accessing translation related
- * information about the user.
- *
- * @ingroup API TranslateAPI
- * @since 2012-11-30
- */
-class ApiTranslateUser extends ApiBase {
- public function execute() {
- $output = array();
-
- $user = $this->getUser();
- $groups = $user->getOption( 'translate-recent-groups', '' );
- $output['recentgroups'] = array();
- if ( (string)$groups !== '' ) {
- $output['recentgroups'] = explode( '|', $groups );
- $this->getResult()->setIndexedTagName(
$output['recentgroups'], 'group' );
- }
- $this->getResult()->addValue( null, $this->getModuleName(),
$output );
- }
-
- protected function getExamplesMessages() {
- return array(
- 'action=translateuser'
- => 'apihelp-translateuser-example-1',
- );
- }
-
- /**
- * Keeps track of recently used message groups per user.
- *
- * @param MessageGroup $group
- * @param User $user
- */
- public static function trackGroup( MessageGroup $group, User $user ) {
- if ( $user->isAnon() ) {
- return;
- }
-
- $groups = $user->getOption( 'translate-recent-groups', '' );
-
- if ( $groups === '' ) {
- $groups = array();
- } else {
- $groups = explode( '|', $groups );
- }
-
- if ( isset( $groups[0] ) && $groups[0] === $group->getId() ) {
- return;
- }
-
- array_unshift( $groups, $group->getId() );
- $groups = array_unique( $groups );
- $groups = array_slice( $groups, 0, 5 );
-
- $user->setOption( 'translate-recent-groups', implode( '|',
$groups ) );
- // Promise to persist the data post-send
- DeferredUpdates::addCallableUpdate( function() use ( $user ) {
- $user->saveSettings();
- } );
- }
-}
diff --git a/i18n/api/en.json b/i18n/api/en.json
index b78a793..8b4b5e5 100644
--- a/i18n/api/en.json
+++ b/i18n/api/en.json
@@ -51,8 +51,6 @@
"apihelp-translatesandbox-param-username": "Username when creating
user.",
"apihelp-translatesandbox-param-password": "Password when creating
user.",
"apihelp-translatesandbox-param-email": "Email when creating user.",
- "apihelp-translateuser-description": "Translation related information
about the user.",
- "apihelp-translateuser-example-1": "Show information about the user",
"apihelp-translationaids-description": "Query all translations aids.",
"apihelp-translationaids-param-title": "Full title of a known message.",
"apihelp-translationaids-param-group": "Message group the message
belongs to. If empty then primary group is used.",
diff --git a/i18n/api/qqq.json b/i18n/api/qqq.json
index 9ba7946..8de1fec 100644
--- a/i18n/api/qqq.json
+++ b/i18n/api/qqq.json
@@ -56,8 +56,6 @@
"apihelp-translatesandbox-param-username":
"{{doc-apihelp-param|translatesandbox|username}}",
"apihelp-translatesandbox-param-password":
"{{doc-apihelp-param|translatesandbox|password}}",
"apihelp-translatesandbox-param-email":
"{{doc-apihelp-param|translatesandbox|email}}",
- "apihelp-translateuser-description":
"{{doc-apihelp-description|translateuser}}",
- "apihelp-translateuser-example-1":
"{{doc-apihelp-example|translateuser}}",
"apihelp-translationaids-description":
"{{doc-apihelp-description|translationaids}}",
"apihelp-translationaids-param-title":
"{{doc-apihelp-param|translationaids|title}}",
"apihelp-translationaids-param-group":
"{{doc-apihelp-param|translationaids|group}}\n\nThe term \"primary group\" is
explained at
https://www.mediawiki.org/wiki/Help:Extension:Translate/Glossary\nas \"primary
message group\".",
diff --git a/resources/js/ext.translate.groupselector.js
b/resources/js/ext.translate.groupselector.js
index e9f35c7..dbd8836 100644
--- a/resources/js/ext.translate.groupselector.js
+++ b/resources/js/ext.translate.groupselector.js
@@ -1,7 +1,7 @@
( function ( $, mw ) {
'use strict';
- var groupsLoader, recentGroupsLoader, delay;
+ var groupsLoader, delay;
/**
* options
@@ -9,6 +9,7 @@
* - onSelect: callback with message group id when selected
* - language: language for statistics.
* - preventSelector: boolean to load but not show the group selector.
+ * - recent: list of recent group ids
* groups: list of message group ids
*/
function TranslateMessageGroupSelector( element, options, groups ) {
@@ -87,11 +88,16 @@
.append(
$( '<div>' )
.addClass( 'tux-grouptab
tux-grouptab--all tux-grouptab--selected' )
- .text( mw.msg(
'translate-msggroupselector-search-all' ) ),
+ .text( mw.msg(
'translate-msggroupselector-search-all' ) )
+ );
+
+ if ( ( this.options.recent || [] ).length ) {
+ $listFilters.append(
$( '<div>' )
.addClass( 'tux-grouptab
tux-grouptab--recent' )
.text( mw.msg(
'translate-msggroupselector-search-recent' ) )
);
+ }
$searchGroup = $( '<div>' )
.addClass( 'tux-groupselector__filter__search' )
@@ -317,8 +323,9 @@
* Show recent message groups.
*/
showRecentGroups: function () {
- $.when( this.loadRecentGroups(), this.loadGroups() )
- .done( $.proxy( this.showSelectedGroups, this )
);
+ var recent = this.options.recent || [];
+
+ this.showSelectedGroups( recent );
},
/**
@@ -443,33 +450,6 @@
.promise();
return groupsLoader;
- },
-
- /**
- * Returns list of recently used message groups by the user.
- *
- * @return {jQuery.Promise}
- */
- loadRecentGroups: function () {
- var params;
-
- if ( recentGroupsLoader !== undefined ) {
- return recentGroupsLoader;
- }
-
- params = {
- action: 'translateuser',
- format: 'json'
- };
-
- recentGroupsLoader = new mw.Api()
- .get( params )
- .then( function ( result ) {
- return
result.translateuser.recentgroups;
- } )
- .promise();
-
- return recentGroupsLoader;
},
/**
diff --git a/resources/js/ext.translate.recentgroups.js
b/resources/js/ext.translate.recentgroups.js
new file mode 100644
index 0000000..7ddcd65
--- /dev/null
+++ b/resources/js/ext.translate.recentgroups.js
@@ -0,0 +1,37 @@
+( function ( $, mw ) {
+ 'use strict';
+
+ mw.translate = mw.translate || {};
+
+ /**
+ * Simple wrapper for storing recent groups for an user.
+ *
+ * @class mw.translate.recentGroups
+ * @singleton
+ * @since 2016.03
+ */
+
+ mw.translate.recentGroups = {
+ // TODO: Use mw.storage when MW >= 1.26
+ get: function () {
+ try {
+ return JSON.parse( window.localStorage.getItem(
'translate-recentgroups' ) ) || [];
+ } catch ( e ) {}
+ return [];
+ },
+
+ append: function ( value ) {
+ var items = this.get() || [];
+
+ items.unshift( value );
+ items = $.unique( items );
+ items = items.slice( 0, 5 );
+
+ try {
+ window.localStorage.setItem(
'translate-recentgroups', JSON.stringify( items ) );
+ return true;
+ } catch ( e ) {}
+ return false;
+ }
+ };
+}( jQuery, mediaWiki ) );
diff --git a/resources/js/ext.translate.special.translate.js
b/resources/js/ext.translate.special.translate.js
index 5c69dab..4d55e0c 100644
--- a/resources/js/ext.translate.special.translate.js
+++ b/resources/js/ext.translate.special.translate.js
@@ -159,6 +159,8 @@
id = $( '.tux-messagetable-loader' ).data(
'messagegroup' ),
props = 'priority|prioritylangs|priorityforce';
+ mw.translate.recentGroups.append( id );
+
$groupWarning.empty();
mw.translate.getMessageGroup( id, props ).done( function (
group ) {
@@ -236,12 +238,13 @@
$( '.tux-breadcrumb .grouplink' ).msggroupselector( {
onSelect: mw.translate.changeGroup,
language: targetLanguage,
- position: position
+ position: position,
+ recent: mw.translate.recentGroups.get()
} );
updateGroupWarning();
- $( '.tux-messagelist' ).messagetable();
+ $messageList.messagetable();
// Use ULS for language selection if it's available
ulsOptions = {
onSelect: function ( language ) {
diff --git a/specials/SpecialTranslate.php b/specials/SpecialTranslate.php
index 899f3ce..871c76b 100644
--- a/specials/SpecialTranslate.php
+++ b/specials/SpecialTranslate.php
@@ -236,8 +236,6 @@
} else {
$out->addHTML( $description . $output );
}
-
- ApiTranslateUser::trackGroup( $this->group,
$this->getUser() );
}
if ( $isBeta ) {
--
To view, visit https://gerrit.wikimedia.org/r/278461
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I9f42278a3d61e2cbbf3157a0446ec395939c73c0
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Translate
Gerrit-Branch: master
Gerrit-Owner: Nikerabbit <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits