Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
97.50% covered (success)
97.50%
39 / 40
50.00% covered (danger)
50.00%
1 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
DataScript
97.50% covered (success)
97.50%
39 / 40
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.30% covered (success)
97.30%
36 / 37
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 MediaWiki\MediaWikiServices;
26use MediaWiki\Registration\ExtensionRegistry;
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            'defaultPreferences' => $mwConfig->get( 'CodeMirrorDefaultPreferences' ),
63            'lineNumberingNamespaces' => $mwConfig->get( 'CodeMirrorLineNumberingNamespaces' ),
64            'templateFoldingNamespaces' => $mwConfig->get( 'CodeMirrorTemplateFoldingNamespaces' ),
65            'autocompleteNamespaces' => $mwConfig->get( 'CodeMirrorAutocompleteNamespaces' ),
66            'openLinksNamespaces' => $mwConfig->get( 'CodeMirrorOpenLinksNamespaces' ),
67            'pluginModules' => $registry->getAttribute( 'CodeMirrorPluginModules' ),
68            'tagModes' => $tagModes,
69            'tags' => array_fill_keys( $tagNames, true ),
70            'doubleUnderscore' => [ [], [] ],
71            'functionSynonyms' => $parser->getFunctionSynonyms(),
72            'urlProtocols' => $parser->getUrlProtocols(),
73            'linkTrailCharacters' => $lang->linkTrail(),
74        ];
75
76        $mw = $lang->getMagicWords();
77        $magicWordFactory = $parser->getMagicWordFactory();
78        foreach ( $magicWordFactory->getDoubleUnderscoreArray()->getNames() as $name ) {
79            if ( isset( $mw[$name] ) ) {
80                $caseSensitive = array_shift( $mw[$name] ) == 0 ? 0 : 1;
81                foreach ( $mw[$name] as $n ) {
82                    $n = $caseSensitive ? $n : $lang->lc( $n );
83                    $config['doubleUnderscore'][$caseSensitive][$n] = $name;
84                }
85            } else {
86                $config['doubleUnderscore'][0][] = $name;
87            }
88        }
89
90        foreach ( $magicWordFactory->getVariableIDs() as $name ) {
91            if ( isset( $mw[$name] ) ) {
92                $caseSensitive = array_shift( $mw[$name] ) == 0 ? 0 : 1;
93                foreach ( $mw[$name] as $n ) {
94                    $n = $caseSensitive ? $n : $lang->lc( $n );
95                    $config['functionSynonyms'][$caseSensitive][$n] = $name;
96                }
97            }
98        }
99
100        return $config;
101    }
102}