Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 93
0.00% covered (danger)
0.00%
0 / 6
CRAP
0.00% covered (danger)
0.00%
0 / 1
SpecialCollabPad
0.00% covered (danger)
0.00%
0 / 93
0.00% covered (danger)
0.00%
0 / 6
132
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getGroupName
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 isListed
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getShortDescription
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
12
 getAssociatedNavigationLinks
0.00% covered (danger)
0.00%
0 / 6
0.00% covered (danger)
0.00%
0 / 1
6
 execute
0.00% covered (danger)
0.00%
0 / 81
0.00% covered (danger)
0.00%
0 / 1
12
1<?php
2/**
3 * CollabPad special page
4 *
5 * @file
6 * @ingroup Extensions
7 * @copyright 2011-2020 VisualEditor Team and others; see AUTHORS.txt
8 * @license MIT
9 */
10
11namespace MediaWiki\Extension\VisualEditor;
12
13use MediaWiki\Html\Html;
14use MediaWiki\SpecialPage\SpecialPage;
15use MediaWiki\Title\Title;
16use MediaWiki\Widget\TitleInputWidget;
17use OOUI\ActionFieldLayout;
18use OOUI\ButtonWidget;
19use OOUI\FieldsetLayout;
20use OOUI\FormLayout;
21use OOUI\ProgressBarWidget;
22use OOUI\TextInputWidget;
23
24class SpecialCollabPad extends SpecialPage {
25
26    public function __construct() {
27        parent::__construct( 'CollabPad' );
28    }
29
30    /**
31     * @inheritDoc
32     */
33    protected function getGroupName() {
34        return 'wiki';
35    }
36
37    /**
38     * @inheritDoc
39     */
40    public function isListed() {
41        return (bool)$this->getConfig()->get( 'VisualEditorRebaserURL' );
42    }
43
44    /**
45     * @inheritDoc
46     */
47    public function getShortDescription( string $path = '' ): string {
48        switch ( $path ) {
49            case 'CollabPad':
50                return $this->msg( 'collabpad' )->text();
51            default:
52                return implode( '/', array_slice( explode( '/', $path ), 1 ) );
53        }
54    }
55
56    /**
57     * @inheritDoc
58     */
59    public function getAssociatedNavigationLinks() {
60        $thisTitle = $this->getSkin()->getTitle()->getFullText();
61        $title = SpecialPage::getTitleFor( 'CollabPad' )->getFullText();
62        $links = [ $title ];
63        if ( $title !== $thisTitle ) {
64            $links[] = $thisTitle;
65        }
66        return $links;
67    }
68
69    /**
70     * @inheritDoc
71     */
72    public function execute( $subPage ) {
73        $this->setHeaders();
74
75        $output = $this->getOutput();
76
77        if ( !$this->getConfig()->get( 'VisualEditorRebaserURL' ) ) {
78            $output->addHTML( Html::element( 'p', [], $this->msg( 'collabpad-disabled' )->text() ) );
79            return;
80        }
81
82        $output->addJsConfigVars( 'collabPadPageName', $subPage );
83        $output->addModuleStyles( 'ext.visualEditor.collabTarget.init.styles' );
84        $output->addModuleStyles( 'oojs-ui.styles.icons-editing-core' );
85        $output->addModuleStyles( 'oojs-ui.styles.icons-content' );
86
87        $output->addModules( 'ext.visualEditor.collabTarget.init' );
88
89        $output->enableOOUI();
90
91        $documentNameFieldset = new FieldsetLayout( [
92            'label' => $this->msg( 'visualeditor-rebase-client-document-create-edit' )->text(),
93            'icon' => 'edit',
94            'items' => [
95                new ActionFieldLayout(
96                    new TextInputWidget( [
97                        'classes' => [ 've-init-mw-collabTarget-nameInput' ],
98                        'placeholder' => $this->msg( 'visualeditor-rebase-client-document-name' )->text(),
99                        'autofocus' => true,
100                        'infusable' => true
101                    ] ),
102                    new ButtonWidget( [
103                        'classes' => [ 've-init-mw-collabTarget-nameButton' ],
104                        'label' => $this->msg( 'visualeditor-rebase-client-document-create-edit' )->text(),
105                        'flags' => [ 'primary', 'progressive' ],
106                        // Only enable once JS has loaded
107                        'disabled' => true,
108                        'infusable' => true
109                    ] ),
110                    [
111                        'align' => 'top',
112                        'classes' => [ 've-init-mw-collabTarget-nameField' ],
113                        'infusable' => true
114                    ]
115                )
116            ]
117        ] );
118        $importFieldset = new FieldsetLayout( [
119            'label' => $this->msg( 'visualeditor-rebase-client-import' )->text(),
120            'icon' => 'download',
121            'items' => [
122                new ActionFieldLayout(
123                    new TitleInputWidget( [
124                        'classes' => [ 've-init-mw-collabTarget-importInput' ],
125                        'placeholder' => $this->msg( 'visualeditor-rebase-client-import-name' )->text(),
126                        'infusable' => true,
127                    ] ),
128                    new ButtonWidget( [
129                        'classes' => [ 've-init-mw-collabTarget-importButton' ],
130                        'label' => $this->msg( 'visualeditor-rebase-client-import' )->text(),
131                        'flags' => [ 'progressive' ],
132                        // Only enable once JS has loaded
133                        'disabled' => true,
134                        'infusable' => true
135                    ] ),
136                    [
137                        'align' => 'top',
138                        'classes' => [ 've-init-mw-collabTarget-importField' ],
139                        'infusable' => true
140                    ]
141                )
142            ]
143        ] );
144
145        $form = new FormLayout( [
146            'classes' => [ 've-init-mw-collabTarget-form' ],
147            'items' => [
148                $documentNameFieldset,
149                $importFieldset
150            ],
151            'infusable' => true
152        ] );
153
154        $progressBar = new ProgressBarWidget( [
155            'classes' => [ 've-init-mw-collabTarget-loading' ],
156            'infusable' => true
157        ] );
158
159        if ( $subPage ) {
160            $title = Title::newFromText( $subPage );
161            $output->setPageTitleMsg( $this->msg( 'collabpad-doctitle', $title->getPrefixedText() ) );
162            $form->addClasses( [ 'oo-ui-element-hidden' ] );
163        } else {
164            // Scripts only, styles already added above
165            $output->addModules( 'ext.visualEditor.collabTarget' );
166            $progressBar->addClasses( [ 'oo-ui-element-hidden' ] );
167        }
168        $output->addHTML( $progressBar . $form );
169    }
170}