Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 1
DashikiView
0.00% covered (danger)
0.00%
0 / 19
0.00% covered (danger)
0.00%
0 / 3
20
0.00% covered (danger)
0.00%
0 / 1
 valueToHtml
0.00% covered (danger)
0.00%
0 / 5
0.00% covered (danger)
0.00%
0 / 1
2
 renderHeader
0.00% covered (danger)
0.00%
0 / 12
0.00% covered (danger)
0.00%
0 / 1
6
 startsWith
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2
3namespace Dashiki;
4
5use JsonConfig\JCContent;
6use JsonConfig\JCDefaultContentView;
7use MediaWiki\Html\Html;
8use MediaWiki\Page\PageReference;
9use MediaWiki\Shell\Shell;
10use ParserOptions;
11use ParserOutput;
12
13/**
14 * Used to render Dashiki JSON configuration pages to HTML
15 * @package Dashiki
16 */
17class DashikiView extends JCDefaultContentView {
18
19    /**
20     * Customizes valueToHtml() for Dashiki
21     *
22     * @param JCContent $content
23     * @param PageReference $page Context page for parsing
24     * @param int|null $revId Revision ID (for {{REVISIONID}})
25     * @param ParserOptions $options Parser options
26     * @param bool $generateHtml Whether or not to generate HTML
27     * @param ParserOutput &$output The output object to fill (reference).
28     * @return string
29     */
30    public function valueToHtml(
31        JCContent $content, PageReference $page, $revId, ParserOptions $options, $generateHtml,
32        ParserOutput &$output
33    ) {
34        $header = $this->renderHeader( $page->getDBKey() );
35        $tableDisplay = parent::valueToHtml(
36            $content, $page, $revId, $options, $generateHtml, $output
37        );
38        return $header . $tableDisplay;
39    }
40
41    /**
42     * @param string $dbkey
43     * @return string HTML
44     */
45    public function renderHeader( $dbkey ) {
46        $docsLink = Html::element( 'a', [
47            'href' => 'https://wikitech.wikimedia.org/wiki/Analytics/Systems/Dashiki/Configuration'
48        ], wfMessage( 'parentheses', wfMessage( 'dashiki-configuration-doc-link-text' ) )->text() );
49
50        if ( $this->startsWith( $dbkey, 'Dashiki:Annotations/' ) ) {
51            $message = wfMessage( 'dashiki-annotate' )->text();
52            $br = Html::element( 'br' );
53            $suffix = $br . $br;
54        } else {
55            $message = wfMessage( 'dashiki-build' )->text();
56            $suffix = Html::element( 'pre', [],
57                'gulp --config ' . Shell::escape( $dbkey ) . ' --layout /*...*/' );
58        }
59
60        $span = Html::element( 'span', [], $message . ' ' );
61
62        return $span . $docsLink . $suffix;
63    }
64
65    /**
66     * @param string $text
67     * @param string $query
68     *
69     * @return bool
70     */
71    private function startsWith( $text, $query ) {
72        $length = strlen( $query );
73        return ( substr( $text, 0, $length ) === $query );
74    }
75}