1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
<?php
/**
* Compact stats.
*
* @file
* @author Niklas Laxström
* @copyright Copyright © 2012-2013 Niklas Laxström
* @license GPL-2.0-or-later
*/
/**
* Compact, colorful stats.
* @since 2012-11-30
*/
class StatsBar {
/**
* @see MessageGroupStats
* @var int[]
*/
protected $stats;
/**
* @var string Message group id
*/
protected $group;
/**
* @var string Language
*/
protected $language;
/**
* @param string $group
* @param string $language
* @param int[]|null $stats
*
* @return self
*/
public static function getNew( $group, $language, array $stats = null ) {
$self = new self();
$self->group = $group;
$self->language = $language;
if ( is_array( $stats ) ) {
$self->stats = $stats;
} else {
$self->stats = MessageGroupStats::forItem( $group, $language );
}
return $self;
}
/**
* @param IContextSource $context
*
* @return string HTML
*/
public function getHtml( IContextSource $context ) {
$context->getOutput()->addModules( 'ext.translate.statsbar' );
$total = $this->stats[MessageGroupStats::TOTAL];
$proofread = $this->stats[MessageGroupStats::PROOFREAD];
$translated = $this->stats[MessageGroupStats::TRANSLATED];
$fuzzy = $this->stats[MessageGroupStats::FUZZY];
if ( !$total ) {
$untranslated = null;
$wproofread = $wtranslated = $wfuzzy = $wuntranslated = 0;
} else {
// Proofread is subset of translated
$untranslated = $total - $translated - $fuzzy;
$wproofread = round( 100 * $proofread / $total, 2 );
$wtranslated = round( 100 * ( $translated - $proofread ) / $total, 2 );
$wfuzzy = round( 100 * $fuzzy / $total, 2 );
$wuntranslated = round( 100 - $wproofread - $wtranslated - $wfuzzy, 2 );
}
return Html::rawElement( 'div', [
'class' => 'tux-statsbar',
'data-total' => $total,
'data-group' => $this->group,
'data-language' => $this->language,
],
Html::element( 'span', [
'class' => 'tux-proofread',
'style' => "width: $wproofread%",
'data-proofread' => $proofread,
] ) . Html::element( 'span', [
'class' => 'tux-translated',
'style' => "width: $wtranslated%",
'data-translated' => $translated,
] ) . Html::element( 'span', [
'class' => 'tux-fuzzy',
'style' => "width: $wfuzzy%",
'data-fuzzy' => $fuzzy,
] ) . Html::element( 'span', [
'class' => 'tux-untranslated',
'style' => "width: $wuntranslated%",
'data-untranslated' => $untranslated,
] )
);
}
}
|