jenkins-bot has submitted this change and it was merged.

Change subject: Do not output empty rows or columns in stats table
......................................................................


Do not output empty rows or columns in stats table

Change-Id: I022bc6e84bd31338f662c787929b0dafd0be5e26
---
M modules/stats/ext.cx.stats.js
1 file changed, 59 insertions(+), 39 deletions(-)

Approvals:
  Santhosh: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/modules/stats/ext.cx.stats.js b/modules/stats/ext.cx.stats.js
index b91ad0e..ba87437 100644
--- a/modules/stats/ext.cx.stats.js
+++ b/modules/stats/ext.cx.stats.js
@@ -27,23 +27,37 @@
                } );
        }
 
+       /**
+        * Similar to array_unique in PHP.
+        * @param {array} list List of strings
+        * @return {array}
+        */
+       function uniq( list ) {
+               return $.grep( list, function ( v, k ) {
+                       return $.inArray( v, list ) === k;
+               } );
+       }
+
        function jsonToTable( records, status, property ) {
-               var i, j, record,
+               var i, j, record, srcLen, trgLen,
                        table = [],
-                       languages = [];
+                       sourceLanguages = [],
+                       targetLanguages = [];
 
                max = 0;
                for ( i = 0; i < records.length; i++ ) {
-                       languages.push( records[ i ].sourceLanguage );
-                       languages.push( records[ i ].targetLanguage );
+                       sourceLanguages.push( records[ i ].sourceLanguage );
+                       targetLanguages.push( records[ i ].targetLanguage );
                }
+
                // remove duplicates
-               languages = $.grep( languages, function ( v, k ) {
-                       return $.inArray( v, languages ) === k;
-               } );
-               languages.sort();
-               for ( i = 0; i <= languages.length; i++ ) {
-                       for ( j = 0; j <= languages.length; j++ ) {
+               sourceLanguages = uniq( sourceLanguages ).sort();
+               targetLanguages = uniq( targetLanguages ).sort();
+               srcLen = sourceLanguages.length;
+               trgLen = targetLanguages.length;
+
+               for ( i = 0; i <= srcLen; i++ ) {
+                       for ( j = 0; j <= trgLen; j++ ) {
                                table[ i ] = table[ i ] || [];
                                if ( i === 0 && j === 0 ) {
                                        table[ 0 ][ 0 ] = mw.msg(
@@ -55,42 +69,49 @@
                                                .attr( {
                                                        target: '_blank',
                                                        href: 
mw.cx.siteMapper.getPageUrl(
-                                                               languages[ j - 
1 ],
-                                                               
'Special:RecentChanges',
-                                                               { tagfilter: 
'contenttranslation' }
+                                                               
targetLanguages[ j - 1 ],
+                                                               
'Special:RecentChanges', {
+                                                                       
tagfilter: 'contenttranslation'
+                                                               }
                                                        )
                                                } )
-                                               .text( languages[ j - 1 ] );
+                                               .text( targetLanguages[ j - 1 ] 
);
                                        continue;
                                }
                                if ( j === 0 ) {
-                                       table[ i ][ 0 ] = languages[ i - 1 ];
+                                       table[ i ][ 0 ] = sourceLanguages[ i - 
1 ];
                                        continue;
                                }
-                               record = findLanguagePair( records, languages[ 
i - 1 ],
-                                       languages[ j - 1 ], status );
+
+                               record = findLanguagePair(
+                                       records,
+                                       sourceLanguages[ i - 1 ],
+                                       targetLanguages[ j - 1 ],
+                                       status
+                               );
+
                                table[ i ][ j ] = record[ 0 ] && record[ 0 ][ 
property ] || 0;
-                               table[ i ][ j ] = parseInt( table[ i ][ j ] );
+                               table[ i ][ j ] = parseInt( table[ i ][ j ], 10 
);
                                // Keep track of max value of translation in 
any language pair.
                                // Required for coloring
                                max = table[ i ][ j ] > max ? table[ i ][ j ] : 
max;
                                // Total(to)
-                               table[ i ][ languages.length + 1 ] = table[ i 
][ languages.length + 1 ] || 0;
-                               table[ i ][ languages.length + 1 ] += table[ i 
][ j ];
+                               table[ i ][ trgLen + 1 ] = table[ i ][ trgLen + 
1 ] || 0;
+                               table[ i ][ trgLen + 1 ] += table[ i ][ j ];
                                // Total(from)
-                               table[ languages.length + 1 ] = table[ 
languages.length + 1 ] || [];
-                               table[ languages.length + 1 ][ j ] = table[ 
languages.length + 1 ][ j ] || 0;
-                               table[ languages.length + 1 ][ j ] += table[ i 
][ j ];
+                               table[ srcLen + 1 ] = table[ srcLen + 1 ] || [];
+                               table[ srcLen + 1 ][ j ] = table[ srcLen + 1 ][ 
j ] || 0;
+                               table[ srcLen + 1 ][ j ] += table[ i ][ j ];
                        }
+
                        // Total translations
-                       table[ languages.length + 1 ] = table[ languages.length 
+ 1 ] || [];
-                       table[ languages.length + 1 ][ languages.length + 1 ] =
-                               table[ languages.length + 1 ][ languages.length 
+ 1 ] || 0;
-                       table[ languages.length + 1 ][ languages.length + 1 ] +=
-                               table[ i ][ languages.length + 1 ];
+                       table[ srcLen + 1 ] = table[ srcLen + 1 ] || [];
+                       table[ srcLen + 1 ][ trgLen + 1 ] = table[ srcLen + 1 
][ trgLen + 1 ] || 0;
+                       table[ srcLen + 1 ][ trgLen + 1 ] += table[ i ][ trgLen 
+ 1 ];
                }
-               table[ 0 ][ languages.length + 1 ] = mw.msg( 
'cx-stats-table-source-total' );
-               table[ languages.length + 1 ][ 0 ] = mw.msg( 
'cx-stats-table-target-total' );
+
+               table[ 0 ][ trgLen + 1 ] = mw.msg( 
'cx-stats-table-source-total' );
+               table[ srcLen + 1 ][ 0 ] = mw.msg( 
'cx-stats-table-target-total' );
 
                return table;
        }
@@ -98,8 +119,8 @@
        function createStatsTable( table ) {
                var i, j, $table, $thead, $tbody, $headerRow,
                        $row, division, value, $td;
-               // Categorize the translations to 5 sets for coloring
-               division = Math.ceil( max / 5 );
+               // Categorize the translations to 4 sets for coloring
+               division = max / 4;
                $table = $( '<table>' )
                        .addClass( 'cx-stats' );
 
@@ -109,7 +130,7 @@
 
                for ( i = 0; i < table.length; i++ ) {
                        $row = $( '<tr>' );
-                       for ( j = 0; j < table.length; j++ ) {
+                       for ( j = 0; j < table[ i ].length; j++ ) {
                                value = table[ i ][ j ];
                                if ( value instanceof jQuery ) {
                                        $td = $( '<td>' ).append( value );
@@ -117,8 +138,8 @@
                                        $td = $( '<td>' ).text( value === 0 ? 
'' : mw.language.convertNumber( value ) );
                                }
                                if ( i > 0 && j > 0 && i < table.length - 1 && 
j <
-                                       table.length - 1 && value > 0 ) {
-                                       $td.addClass( 'cx-stat-color-' + 
parseInt( value / division ) );
+                                       table[ i ].length - 1 && value > 0 ) {
+                                       $td.addClass( 'cx-stat-color-' + 
parseInt( value / division, 10 ) );
                                }
                                $row.append( $td );
                        }
@@ -129,20 +150,19 @@
                        }
                }
                $table.append( $thead, $tbody );
+
                return $table;
        }
 
        function prepareTranslationsTable( records, status ) {
-               var table;
+               var table = jsonToTable( records, status, 'count' );
 
-               table = jsonToTable( records, status, 'count' );
                return createStatsTable( table );
        }
 
        function prepareTranslatorsTable( records, status ) {
-               var table;
+               var table = jsonToTable( records, status, 'translators' );
 
-               table = jsonToTable( records, status, 'translators' );
                return createStatsTable( table );
        }
 

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I022bc6e84bd31338f662c787929b0dafd0be5e26
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/ContentTranslation
Gerrit-Branch: master
Gerrit-Owner: Nikerabbit <[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