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, ] ) ); } }