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