Santhosh has submitted this change and it was merged.

Change subject: Dynamic rendering and selection of workflow states
......................................................................


Dynamic rendering and selection of workflow states

Change-Id: Ic0daa07b8ab26b607d02bf3b44fb07f8fa94c257
---
M Translate.php
M resources/js/ext.translate.base.js
M resources/js/ext.translate.groupselector.js
M resources/js/ext.translate.messagetable.js
M resources/js/ext.translate.special.translate.js
M specials/SpecialTranslate.php
6 files changed, 86 insertions(+), 60 deletions(-)

Approvals:
  Santhosh: Verified; Looks good to me, approved



diff --git a/Translate.php b/Translate.php
index 561fffc..ef502f3 100644
--- a/Translate.php
+++ b/Translate.php
@@ -466,6 +466,7 @@
                'translate-workflow-set-error-alreadyset',
                'translate-js-support-unsaved-warning',
                'translate-documentation-language',
+               'translate-workflow-state-',
        ),
 ) + $resourcePaths;
 
diff --git a/resources/js/ext.translate.base.js 
b/resources/js/ext.translate.base.js
index d424f92..4797433 100644
--- a/resources/js/ext.translate.base.js
+++ b/resources/js/ext.translate.base.js
@@ -12,6 +12,7 @@
                // indexed by language code
                languageStatsLoader: {},
 
+               messageGroups: {},
                /**
                 * Get language stats for a language from the API.
                 * @param {string} language Language code.
@@ -34,6 +35,23 @@
                        return mw.translate.languageStatsLoader[language];
                },
 
+               loadMessageGroups: function () {
+                       var loader,
+                               queryParams = {
+                                       action: 'query',
+                                       format: 'json',
+                                       meta: 'messagegroups',
+                                       mgformat: 'tree',
+                                       mgprop: 
'id|label|description|icon|priority|prioritylangs|priorityforce|workflowstates',
+                                       mgiconsize: '32'
+                               };
+                       loader = new mw.Api().get( queryParams );
+                       loader.done( function ( result ) {
+                               mw.translate.messageGroups = 
result.query.messagegroups;
+                       } );
+                       return loader;
+               },
+
                /**
                 * Check if the current user is allowed to translate on this 
wiki.
                 * @return {boolean}
diff --git a/resources/js/ext.translate.groupselector.js 
b/resources/js/ext.translate.groupselector.js
index e9d3161..9078cd5 100644
--- a/resources/js/ext.translate.groupselector.js
+++ b/resources/js/ext.translate.groupselector.js
@@ -374,27 +374,8 @@
                 * @param parentGroupId
                 */
                loadGroups: function ( parentGroupId ) {
-                       var queryParams,
-                               groupSelector = this;
-
-                       if ( !TranslateMessageGroupSelector.loader ) {
-                               queryParams = {
-                                       action: 'query',
-                                       format: 'json',
-                                       meta: 'messagegroups',
-                                       mgformat: 'tree',
-                                       mgprop: 
'id|label|description|icon|priority|prioritylangs|priorityforce|workflowstates',
-                                       // Keep this in sync with css!
-                                       mgiconsize: '32'
-                               };
-
-                               TranslateMessageGroupSelector.loader = new 
mw.Api().get( queryParams );
-                       }
-
-                       TranslateMessageGroupSelector.loader.done( function ( 
result ) {
-                               groupSelector.$menu.data( 'msggroups', 
result.query.messagegroups );
-                               groupSelector.addGroupRows( parentGroupId, null 
);
-                       } );
+                       this.$menu.data( 'msggroups', 
mw.translate.messageGroups );
+                       this.addGroupRows( parentGroupId, null );
                },
 
                /**
@@ -580,7 +561,7 @@
                var i, messageGroup;
 
                if ( !messageGroups ) {
-                       messageGroups = this.$menu.data( 'msggroups' );
+                       messageGroups = mw.translate.messageGroups;
                }
 
                for ( i = 0; i < messageGroups.length; i++ ) {
diff --git a/resources/js/ext.translate.messagetable.js 
b/resources/js/ext.translate.messagetable.js
index ff30c4d..fb9b9c9 100644
--- a/resources/js/ext.translate.messagetable.js
+++ b/resources/js/ext.translate.messagetable.js
@@ -270,7 +270,8 @@
                        $.when(
                                mw.translate.getMessages( messagegroup, 
targetLanguage, offset, pageSize, filter )
                        ).then( function ( result ) {
-                               var messages = result.query.messagecollection;
+                               var messages = result.query.messagecollection,
+                                       $workflowSelector = $( 
'ul.tux-workflow-status-selector ' );
 
                                $.each( messages, function ( index, message ) {
                                        message.group = messagegroup;
@@ -301,6 +302,20 @@
                                $( '.tux-messagetable-loader-more' ).text(
                                        mw.msg( 
'tux-messagetable-loading-messages', Math.min( remaining, pageSize ) )
                                );
+
+                               mw.translate.prepareWorkflowSelector( 
mw.translate.getGroup( messagegroup ) );
+                               if ( result.query.metadata && 
result.query.metadata.state ) {
+                                       $workflowSelector.find( 'li' ).each( 
function () {
+                                               var $this = $( this );
+
+                                               if ( $this.data( 'state' ).id 
=== result.query.metadata.state ) {
+                                                       $( 
'.tux-workflow-status' ).text( mw.msg( 'translate-workflowstatus',  
$this.text() ) );
+                                                       $this.addClass( 
'selected' );
+                                               } else {
+                                                       $this.removeClass( 
'selected' );
+                                               }
+                                       } );
+                               }
                        } );
                },
 
@@ -394,7 +409,6 @@
                        $( this ).addClass( 'hide' );
                } );
 
-               $( '.tux-messagelist' ).messagetable();
        } );
 
        var delay = ( function () {
diff --git a/resources/js/ext.translate.special.translate.js 
b/resources/js/ext.translate.special.translate.js
index df31079..a1e3ae5 100644
--- a/resources/js/ext.translate.special.translate.js
+++ b/resources/js/ext.translate.special.translate.js
@@ -80,6 +80,7 @@
 
                        mw.translate.loadMessages( changes );
                        mw.translate.changeUrl( changes );
+                       mw.translate.prepareWorkflowSelector( group );
                },
 
                changeLanguage: function ( language ) {
@@ -142,6 +143,32 @@
                                };
 
                        return api.post( params );
+               },
+
+
+               prepareWorkflowSelector: function ( group ) {
+                       var $selector = $( 'ul.tux-workflow-status-selector' ),
+                               workflowstates = group.workflowstates;
+
+                       $selector.empty();
+
+                       $.each( workflowstates, function ( id, workflowstate ) {
+                               if ( workflowstate._canchange ) {
+                                       workflowstate.id = id;
+                                       $selector.append( $('<li>')
+                                               .data( 'state', workflowstate )
+                                               .text( workflowstate._name )
+                                               .on( 'click', function() {
+                                                       $selector.find( 
'.selected' ).removeClass( 'selected' );
+                                                       $( this ).addClass( 
'selected' )
+                                                               
.parent().addClass( 'hide' );
+                                                       
workflowSelectionHandler( $( this ).data( 'state' ) );
+                                               })
+                                       );
+                               }
+                       } );
+                       $( '.tux-workflow-status' ).text( mw.msg( 
'translate-workflow-state-' ) );
+                       return $selector;
                }
        } );
 
@@ -201,6 +228,19 @@
                        .filter( '.translated, .proofread' );
        }
 
+       function workflowSelectionHandler ( state ) {
+               var $status = $( '.tux-workflow-status' );
+
+               $status.text( mw.msg( 'translate-workflow-set-doing' ) );
+               mw.translate.changeWorkflowStatus( $status.data( 'group' ),
+                       $status.data( 'language' ),
+                       state.id,
+                       $status.data( 'token' )
+               ).done( function() {
+                       $status.text( mw.msg( 'translate-workflowstatus', 
state._name ) );
+               } );
+       }
+
        $( document ).ready( function () {
                var uiLanguage, $translateContainer, $hideTranslatedButton,
                        docLanguageAutonym, docLanguageCode, ulsOptions, 
filter, uri;
@@ -223,10 +263,11 @@
 
                ourWindowOnBeforeUnloadRegister();
                prepareWorkflowSelector();
-
                $.when(
                        // Get ready with language stats
-                       mw.translate.loadLanguageStats( uiLanguage )
+                       mw.translate.loadLanguageStats( uiLanguage ),
+                       // Get ready with message groups
+                       mw.translate.loadMessageGroups()
                ).then( function () {
                        $( '.ext-translate-msggroup-selector .grouplink' 
).msggroupselector( {
                                onSelect: groupSelectorHandler
@@ -235,6 +276,7 @@
                                language: uiLanguage,
                                group: $( '.tux-message-list-statsbar' ).data( 
'messagegroup' )
                        } );
+                       $( '.tux-messagelist' ).messagetable();
                } );
 
                // Use ULS for language selection if it's available
diff --git a/specials/SpecialTranslate.php b/specials/SpecialTranslate.php
index 03dd659..f47b207 100644
--- a/specials/SpecialTranslate.php
+++ b/specials/SpecialTranslate.php
@@ -653,44 +653,14 @@
                        'data-token' => ApiGroupReview::getToken( 0, '' ),
                        'data-group' => $this->options['group'],
                        'data-language' => $this->options['language'],
-               ), $this->msg( "translate-workflow-state-" )->escaped() );
+               ) );
 
                $selectorRow = Html::openElement( 'div', array( 'class' => 
'row' ) );
 
+               $selectorRow .= $selector;
                $options = Html::openElement( 'ul', array( 'class' => 
'tux-workflow-status-selector hide' ) );
-
-               $user = $this->getUser();
-               if ( $user->isAllowed( 'translate-groupreview' ) ) {
-                       // Add an option for every state
-                       foreach ( $stateConfig as $state => $config ) {
-                               $stateMessage = $this->msg( 
"translate-workflow-state-$state" );
-                               $stateText = $stateMessage->isBlank() ? $state 
: $stateMessage->text();
-
-                               $attributes = array( 'data-state' => $state );
-
-                               if ( $state === strval( $current ) ) {
-                                       $attributes['class'] = 'selected';
-                                       $selector = Html::element( 'div', array(
-                                               'class' => 
'tux-workflow-status',
-                                               'data-token' => 
ApiGroupReview::getToken( 0, '' ),
-                                               'data-group' => 
$this->options['group'],
-                                               'data-language' => 
$this->options['language'],
-                                       ), $this->msg( 
'translate-workflowstatus', $stateText )->escaped() );
-                               }
-
-                               if ( is_array( $config ) && isset( 
$config['right'] )
-                                       && !$user->isAllowed( $config['right'] )
-                               ) {
-                                       // Dont add - continue
-                                       continue;
-                               }
-
-                               $options .= Html::element( 'li', $attributes, 
$stateText );
-                       }
-                       $selectorRow .= $selector;
-               }
-               $options .= Html::closeElement( 'ul' );
-               return $selectorRow . $options . Html::closeElement( 'div' );
+               $options .= Html::closeElement( 'ul');
+               return $selectorRow. $options. Html::closeElement( 'div');
        }
 
        protected function getWorkflowStatus() {

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

Gerrit-MessageType: merged
Gerrit-Change-Id: Ic0daa07b8ab26b607d02bf3b44fb07f8fa94c257
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/Translate
Gerrit-Branch: master
Gerrit-Owner: Santhosh <[email protected]>
Gerrit-Reviewer: Amire80 <[email protected]>
Gerrit-Reviewer: Nikerabbit <[email protected]>
Gerrit-Reviewer: Santhosh <[email protected]>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to