Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
97.30% covered (success)
97.30%
36 / 37
50.00% covered (danger)
50.00%
1 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
DataScript
97.30% covered (success)
97.30%
36 / 37
50.00% covered (danger)
50.00%
1 / 2
12
0.00% covered (danger)
0.00%
0 / 1
 makeScript
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
1
 getFrontendConfiguraton
97.06% covered (success)
97.06%
33 / 34
0.00% covered (danger)
0.00%
0 / 1
11
1<?php
2/**
3 * ResourceLoader callback for ext.CodeMirror.data module
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18 * http://www.gnu.org/copyleft/gpl.html
19 *
20 * @file
21 */
22
23namespace MediaWiki\Extension\CodeMirror;
24
25use ExtensionRegistry;
26use MediaWiki\MediaWikiServices;
27use MediaWiki\ResourceLoader as RL;
28use MediaWiki\ResourceLoader\ResourceLoader;
29
30/**
31 * ResourceLoader callback for ext.CodeMirror.data
32 */
33class DataScript {
34    /**
35     * @param RL\Context $context
36     * @return string
37     */
38    public static function makeScript( RL\Context $context ) {
39        return ResourceLoader::makeConfigSetScript(
40                [ 'extCodeMirrorConfig' => self::getFrontendConfiguraton() ]
41            );
42    }
43
44    /**
45     * Returns an array of variables for CodeMirror to work (tags and so on)
46     *
47     * @return array
48     */
49    private static function getFrontendConfiguraton() {
50        // Use the content language, not the user language. (See T170130.)
51        $lang = MediaWikiServices::getInstance()->getContentLanguage();
52        $registry = ExtensionRegistry::getInstance();
53        $parser = MediaWikiServices::getInstance()->getParser();
54        $mwConfig = MediaWikiServices::getInstance()->getMainConfig();
55
56        $tagModes = $registry->getAttribute( 'CodeMirrorTagModes' );
57        $tagNames = array_merge( $parser->getTags(), array_keys( $tagModes ) );
58
59        // initialize configuration
60        $config = [
61            'useV6' => $mwConfig->get( 'CodeMirrorV6' ),
62            'lineNumberingNamespaces' => $mwConfig->get( 'CodeMirrorLineNumberingNamespaces' ),
63            'templateFoldingNamespaces' => $mwConfig->get( 'CodeMirrorTemplateFoldingNamespaces' ),
64            'pluginModules' => $registry->getAttribute( 'CodeMirrorPluginModules' ),
65            'tagModes' => $tagModes,
66            'tags' => array_fill_keys( $tagNames, true ),
67            'doubleUnderscore' => [ [], [] ],
68            'functionSynonyms' => $parser->getFunctionSynonyms(),
69            'urlProtocols' => $parser->getUrlProtocols(),
70            'linkTrailCharacters' => $lang->linkTrail(),
71        ];
72
73        $mw = $lang->getMagicWords();
74        $magicWordFactory = $parser->getMagicWordFactory();
75        foreach ( $magicWordFactory->getDoubleUnderscoreArray()->getNames() as $name ) {
76            if ( isset( $mw[$name] ) ) {
77                $caseSensitive = array_shift( $mw[$name] ) == 0 ? 0 : 1;
78                foreach ( $mw[$name] as $n ) {
79                    $n = $caseSensitive ? $n : $lang->lc( $n );
80                    $config['doubleUnderscore'][$caseSensitive][$n] = $name;
81                }
82            } else {
83                $config['doubleUnderscore'][0][] = $name;
84            }
85        }
86
87        foreach ( $magicWordFactory->getVariableIDs() as $name ) {
88            if ( isset( $mw[$name] ) ) {
89                $caseSensitive = array_shift( $mw[$name] ) == 0 ? 0 : 1;
90                foreach ( $mw[$name] as $n ) {
91                    $n = $caseSensitive ? $n : $lang->lc( $n );
92                    $config['functionSynonyms'][$caseSensitive][$n] = $name;
93                }
94            }
95        }
96
97        return $config;
98    }
99}