diff options
Diffstat (limited to 'www/wiki/extensions/Translate/utils/StatsBar.php')
-rw-r--r-- | www/wiki/extensions/Translate/utils/StatsBar.php | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/www/wiki/extensions/Translate/utils/StatsBar.php b/www/wiki/extensions/Translate/utils/StatsBar.php new file mode 100644 index 00000000..df2801a2 --- /dev/null +++ b/www/wiki/extensions/Translate/utils/StatsBar.php @@ -0,0 +1,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 array[]|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, + ] ) + ); + } +} |