Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
Total | |
0.00% |
0 / 29 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 1 |
Hooks | |
0.00% |
0 / 29 |
|
0.00% |
0 / 5 |
156 | |
0.00% |
0 / 1 |
__construct | |
0.00% |
0 / 2 |
|
0.00% |
0 / 1 |
2 | |||
getPageLanguage | |
0.00% |
0 / 9 |
|
0.00% |
0 / 1 |
20 | |||
onGetPreferences | |
0.00% |
0 / 4 |
|
0.00% |
0 / 1 |
2 | |||
onEditPage__showEditForm_initial | |
0.00% |
0 / 13 |
|
0.00% |
0 / 1 |
30 | |||
onEditPage__showReadOnlyForm_initial | |
0.00% |
0 / 1 |
|
0.00% |
0 / 1 |
2 |
1 | <?php |
2 | |
3 | namespace MediaWiki\Extension\CodeEditor; |
4 | |
5 | use ErrorPageError; |
6 | use ExtensionRegistry; |
7 | use MediaWiki\EditPage\EditPage; |
8 | use MediaWiki\Extension\CodeEditor\Hooks\HookRunner; |
9 | use MediaWiki\Hook\EditPage__showEditForm_initialHook; |
10 | use MediaWiki\Hook\EditPage__showReadOnlyForm_initialHook; |
11 | use MediaWiki\HookContainer\HookContainer; |
12 | use MediaWiki\Output\OutputPage; |
13 | use MediaWiki\Preferences\Hook\GetPreferencesHook; |
14 | use MediaWiki\Title\Title; |
15 | use MediaWiki\User\Options\UserOptionsLookup; |
16 | use MediaWiki\User\User; |
17 | |
18 | /** |
19 | * @phpcs:disable MediaWiki.NamingConventions.LowerCamelFunctionsName.FunctionName |
20 | */ |
21 | class Hooks implements |
22 | GetPreferencesHook, |
23 | EditPage__showEditForm_initialHook, |
24 | EditPage__showReadOnlyForm_initialHook |
25 | { |
26 | /** @var UserOptionsLookup */ |
27 | private $userOptionsLookup; |
28 | |
29 | /** @var HookRunner */ |
30 | private $hookRunner; |
31 | |
32 | /** |
33 | * @param UserOptionsLookup $userOptionsLookup |
34 | * @param HookContainer $hookContainer |
35 | */ |
36 | public function __construct( |
37 | UserOptionsLookup $userOptionsLookup, |
38 | HookContainer $hookContainer |
39 | ) { |
40 | $this->userOptionsLookup = $userOptionsLookup; |
41 | $this->hookRunner = new HookRunner( $hookContainer ); |
42 | } |
43 | |
44 | /** |
45 | * @param Title $title |
46 | * @param string $model |
47 | * @param string $format |
48 | * @return null|string |
49 | */ |
50 | private function getPageLanguage( Title $title, $model, $format ) { |
51 | if ( $model === CONTENT_MODEL_JAVASCRIPT ) { |
52 | return 'javascript'; |
53 | } elseif ( $model === CONTENT_MODEL_CSS ) { |
54 | return 'css'; |
55 | } elseif ( $model === CONTENT_MODEL_JSON ) { |
56 | return 'json'; |
57 | } |
58 | |
59 | // Give extensions a chance |
60 | $lang = null; |
61 | $this->hookRunner->onCodeEditorGetPageLanguage( $title, $lang, $model, $format ); |
62 | |
63 | return $lang; |
64 | } |
65 | |
66 | /** |
67 | * @param User $user |
68 | * @param array &$defaultPreferences |
69 | */ |
70 | public function onGetPreferences( $user, &$defaultPreferences ) { |
71 | $defaultPreferences['usecodeeditor'] = [ |
72 | 'type' => 'api', |
73 | 'default' => '1', |
74 | ]; |
75 | } |
76 | |
77 | /** |
78 | * @param EditPage $editpage |
79 | * @param OutputPage $output |
80 | * @throws ErrorPageError |
81 | */ |
82 | public function onEditPage__showEditForm_initial( $editpage, $output ) { |
83 | $title = $editpage->getContextTitle(); |
84 | $model = $editpage->contentModel; |
85 | $format = $editpage->contentFormat; |
86 | |
87 | $lang = $this->getPageLanguage( $title, $model, $format ); |
88 | if ( $lang && $this->userOptionsLookup->getOption( $output->getUser(), 'usebetatoolbar' ) ) { |
89 | $output->addModules( 'ext.codeEditor' ); |
90 | $output->addModuleStyles( 'ext.codeEditor.styles' ); |
91 | $output->addJsConfigVars( 'wgCodeEditorCurrentLanguage', $lang ); |
92 | // Needed because ACE adds a blob: url web-worker. |
93 | $output->getCSP()->addScriptSrc( 'blob:' ); |
94 | |
95 | if ( $this->userOptionsLookup->getOption( $output->getUser(), 'usecodeeditor' ) ) { |
96 | $output->addBodyClasses( 'codeeditor-loading' ); |
97 | } |
98 | } elseif ( !ExtensionRegistry::getInstance()->isLoaded( 'WikiEditor' ) ) { |
99 | throw new ErrorPageError( 'codeeditor-error-title', 'codeeditor-error-message' ); |
100 | } |
101 | } |
102 | |
103 | /** |
104 | * @param EditPage $editpage |
105 | * @param OutputPage $output |
106 | * @throws ErrorPageError |
107 | */ |
108 | public function onEditPage__showReadOnlyForm_initial( $editpage, $output ) { |
109 | $this->onEditPage__showEditForm_initial( $editpage, $output ); |
110 | } |
111 | } |