Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 4
CRAP
0.00% covered (danger)
0.00%
0 / 1
Mode
0.00% covered (danger)
0.00%
0 / 14
0.00% covered (danger)
0.00%
0 / 4
30
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
 getModules
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getModuleStyles
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 dimensions
n/a
0 / 0
n/a
0 / 0
0
 render
n/a
0 / 0
n/a
0 / 0
0
 byName
0.00% covered (danger)
0.00%
0 / 11
0.00% covered (danger)
0.00%
0 / 1
6
1<?php
2declare( strict_types = 1 );
3
4namespace Wikimedia\Parsoid\Ext\Gallery;
5
6use Wikimedia\Parsoid\DOM\DocumentFragment;
7use Wikimedia\Parsoid\Ext\ParsoidExtensionAPI;
8
9abstract class Mode {
10    /**
11     * The name of this mode.
12     * @var string
13     */
14    protected $mode;
15
16    /**
17     * Construct a (singleton) mode.
18     * @param string $name The name of this mode, all lowercase.
19     */
20    protected function __construct( string $name ) {
21        $this->mode = $name;
22    }
23
24    public function getModules(): array {
25        return [];
26    }
27
28    public function getModuleStyles(): array {
29        return [];
30    }
31
32    /**
33     * Format the dimensions as a string.
34     */
35    abstract public function dimensions( Opts $opts ): string;
36
37    /**
38     * Render HTML for the given lines in this mode.
39     * @param ParsoidExtensionAPI $extApi
40     * @param Opts $opts
41     * @param ?DocumentFragment $caption
42     * @param ParsedLine[] $lines
43     * @return DocumentFragment
44     */
45    abstract public function render(
46        ParsoidExtensionAPI $extApi, Opts $opts, ?DocumentFragment $caption,
47        array $lines
48    ): DocumentFragment;
49
50    /**
51     * Return the Mode object with the given name,
52     * or null if the name is invalid.
53     * @param string $name
54     * @return Mode|null
55     */
56    public static function byName( string $name ): ?Mode {
57        static $modesByName = null;
58        if ( $modesByName === null ) {
59            $modesByName = [
60                'traditional' => new TraditionalMode(),
61                'nolines' => new NoLinesMode(),
62                'slideshow' => new SlideshowMode(),
63                'packed' => new PackedMode(),
64                'packed-hover' => new PackedHoverMode(),
65                'packed-overlay' => new PackedOverlayMode()
66            ];
67        }
68        return $modesByName[$name] ?? null;
69    }
70}