Test Setup Failed
Branch master (0c09a6)
by Stephan
02:31
created

V4ModuleDefinition::get()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 8
nc 4
nop 1
dl 0
loc 12
rs 10
c 0
b 0
f 0
1
<?php
2
/**
3
 * @copyright (C) 2013 - 2018, Stephan Gambke
4
 * @license   http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License, version 3 (or later)
5
 *
6
 * This file is part of the MediaWiki extension Bootstrap.
7
 * The Bootstrap extension is free software: you can redistribute it and/or
8
 * modify it under the terms of the GNU General Public License as published by
9
 * the Free Software Foundation, either version 3 of the License, or
10
 * (at your option) any later version.
11
 *
12
 * The Bootstrap extension is distributed in the hope that it will be useful,
13
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15
 * GNU General Public License for more details.
16
 *
17
 * You should have received a copy of the GNU General Public License
18
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
19
 *
20
 * @file
21
 * @ingroup   Bootstrap
22
 */
23
24
namespace Bootstrap\Definition;
25
26
use InvalidArgumentException;
27
28
/**
29
 * Class describing the Bootstrap 4 module definitions
30
 *
31
 * @since 2.0
32
 * @ingroup   Bootstrap
33
 */
34
class V4ModuleDefinition implements ModuleDefinition {
35
36
	static private $moduleDescriptions = [
37
		'functions'         => [ 'styles' => [ 'functions' => [ 'position' => 'functions' ] ] ],
38
		'variables'         => [ 'styles' => [ 'variables' => [ 'position' => 'variables' ] ], 'dependencies' => 'functions' ],
39
		'mixins'            => [ 'styles' => 'mixins' ],
40
		'root'              => [ 'styles' => 'root' ],
41
		'reboot'            => [ 'styles' => 'reboot' ],
42
		'type'              => [ 'styles' => 'type' ],
43
		'images'            => [ 'styles' => 'images' ],
44
		'code'              => [ 'styles' => 'code' ],
45
		'grid'              => [ 'styles' => 'grid' ],
46
		'tables'            => [ 'styles' => 'tables' ],
47
		'forms'             => [ 'styles' => 'forms' ],
48
		'buttons'           => [ 'styles' => 'buttons' ],
49
		'transitions'       => [ 'styles' => 'transitions' ],
50
		'dropdown'          => [ 'styles' => 'dropdown', 'scripts' => 'dropdown.js', 'dependencies' => [ 'popper', 'js-util' ] ],
51
		'button-group'      => [ 'styles' => 'button-group', 'dependencies' => [ 'buttons' ] ],
52
		'input-group'       => [ 'styles' => 'input-group', 'dependencies' => [ 'forms' ] ],
53
		'custom-forms'      => [ 'styles' => 'custom-forms' ],
54
		'nav'               => [ 'styles' => 'nav' ],
55
		'navbar'            => [ 'styles' => 'navbar' ],
56
		'card'              => [ 'styles' => 'card' ],
57
		'breadcrumb'        => [ 'styles' => 'breadcrumb' ],
58
		'pagination'        => [ 'styles' => 'pagination' ],
59
		'badge'             => [ 'styles' => 'badge' ],
60
		'jumbotron'         => [ 'styles' => 'jumbotron' ],
61
		'alert'             => [ 'styles' => 'alert' ],
62
		'progress'          => [ 'styles' => 'progress' ],
63
		'media'             => [ 'styles' => 'media' ],
64
		'list-group'        => [ 'styles' => 'list-group' ],
65
		'close'             => [ 'styles' => 'close' ],
66
		'toasts'            => [ 'styles' => 'toasts', 'scripts' => 'toast.js', 'dependencies' => 'js-util' ],
67
		'modal'             => [ 'styles' => 'modal', 'scripts' => 'modal.js' ],
68
		'tooltip'           => [ 'styles' => 'tooltip', 'dependencies' => [ 'popper', 'js-util' ] ],
69
		'popover'           => [ 'styles' => 'popover', 'dependencies' => [ 'popper', 'tooltip', 'js-util' ] ],
70
		'carousel'          => [ 'styles' => 'carousel', 'scripts' => 'carousel.js', 'dependencies' => 'js-util' ],
71
		'spinners'          => [ 'styles' => 'spinners' ],
72
		'utilities'         => [ 'styles' => 'utilities' ],
73
		'print'             => [ 'styles' => 'print' ],
74
		'active-buttons'    => [ 'scripts' => 'button.js', 'dependencies' => [ 'buttons' ] ],
75
		'dismissable-alert' => [ 'scripts' => 'alert.js', 'dependencies' => [ 'alert', 'js-util' ] ],
76
		'collapse'          => [ 'scripts' => 'collapse.js' ],
77
		'scrollspy'         => [ 'scripts' => 'scrollspy.js', 'dependencies' => [ 'popper', 'js-util' ] ],
78
		'tab'               => [ 'scripts' => 'tab.js', 'dependencies' => [ 'list-group' ] ],
79
		'js-util'           => [ 'scripts' => 'util.js' ],
80
		'popper'            => [ 'scripts' => 'popper.js' ],
81
82
		'bs-core'   => [ 'dependencies' => [ 'variables', 'mixins' ] ],
83
		'bs-reboot' => [ 'dependencies' => [ 'bs-core', 'reboot' ] ],
84
		'bs-grid'   => [ 'styles' => 'bootstrap-grid' ],
85
86
		'bs-basic'  => [ 'dependencies' => [
87
			'bs-core', 'root', 'reboot', 'type', 'images', 'code', 'grid',
88
			'tables', 'transitions', 'utilities', 'print'
89
		] ],
90
91
		'bs-all'    => [ 'dependencies' => [
92
			'bs-core', 'root', 'reboot', 'type', 'images', 'code', 'grid',
93
			'tables', 'forms', 'buttons', 'transitions', 'dropdown',
94
			'button-group', 'input-group', 'custom-forms', 'nav', 'navbar',
95
			'card', 'breadcrumb', 'pagination', 'badge', 'jumbotron', 'alert',
96
			'progress', 'media', 'list-group', 'close', 'toasts', 'modal', 'tooltip',
97
			'popover', 'carousel', 'spinners', 'utilities', 'print', 'active-buttons',
98
			'dismissable-alert', 'collapse', 'scrollspy', 'tab', 'js-util',
99
		] ],
100
101
102
		// TODO: Add each SCSS util separately?
103
		// TODO: Add each SCSS mixin module separately?
104
105
	];
106
107
	static private $coreModules = [	'bs-core' ];
108
	static private $optionalModules = [ 'bs-all' ];
109
110
	/**
111
	 * @see ModuleDefinition::get
112
	 *
113
	 * @since  1.0
114
	 *
115
	 * @param string $key
116
	 *
117
	 * @return array
118
	 * @throws InvalidArgumentException
119
	 */
120
	public function get( $key ) {
121
122
		switch ( $key ) {
123
			case 'core':
124
				return self::$coreModules;
125
			case 'optional':
126
				return self::$optionalModules;
127
			case 'descriptions':
128
				return self::$moduleDescriptions;
129
		}
130
131
		throw new InvalidArgumentException( 'Expected a valid key' );
132
	}
133
134
}
135