Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 10
CRAP
0.00% covered (danger)
0.00%
0 / 1
PackedImageGallery
0.00% covered (danger)
0.00%
0 / 21
0.00% covered (danger)
0.00%
0 / 10
210
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
2
 getVPad
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getThumbPadding
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getGBPadding
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
 getThumbParams
0.00% covered (danger)
0.00%
0 / 7
0.00% covered (danger)
0.00%
0 / 1
12
 getThumbDivWidth
0.00% covered (danger)
0.00%
0 / 3
0.00% covered (danger)
0.00%
0 / 1
6
 getGBWidth
0.00% covered (danger)
0.00%
0 / 2
0.00% covered (danger)
0.00%
0 / 1
6
 adjustImageParameters
0.00% covered (danger)
0.00%
0 / 2
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
 setPerRow
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 1
2
1<?php
2/**
3 * Packed image gallery. All images adjusted to be same height.
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
23use MediaWiki\Context\IContextSource;
24
25class PackedImageGallery extends TraditionalImageGallery {
26    public function __construct( $mode = 'traditional', IContextSource $context = null ) {
27        parent::__construct( $mode, $context );
28        // Does not support per row option.
29        $this->mPerRow = 0;
30    }
31
32    /**
33     * We artificially have 1.5 the resolution necessary so that
34     * we can scale it up by that much on the client side, without
35     * worrying about requesting a new image.
36     */
37    private const SCALE_FACTOR = 1.5;
38
39    protected function getVPad( $boxHeight, $thumbHeight ) {
40        return ( $this->getThumbPadding() + $boxHeight - $thumbHeight / self::SCALE_FACTOR ) / 2;
41    }
42
43    protected function getThumbPadding() {
44        return 0;
45    }
46
47    protected function getGBPadding() {
48        return 2;
49    }
50
51    /**
52     * @param File|false $img The file being transformed. May be false
53     * @return array
54     */
55    protected function getThumbParams( $img ) {
56        if ( $img && $img->getMediaType() === MEDIATYPE_AUDIO ) {
57            $width = $this->mWidths;
58        } else {
59            // We want the width not to be the constraining
60            // factor, so use random big number.
61            $width = $this->mHeights * 10 + 100;
62        }
63
64        // self::SCALE_FACTOR so the js has some room to manipulate sizes.
65        return [
66            'width' => (int)floor( $width * self::SCALE_FACTOR ),
67            'height' => (int)floor( $this->mHeights * self::SCALE_FACTOR ),
68        ];
69    }
70
71    protected function getThumbDivWidth( $thumbWidth ) {
72        // Require at least 60px wide, so caption is wide enough to work.
73        if ( $thumbWidth < 60 * self::SCALE_FACTOR ) {
74            $thumbWidth = 60 * self::SCALE_FACTOR;
75        }
76
77        return $thumbWidth / self::SCALE_FACTOR + $this->getThumbPadding();
78    }
79
80    /**
81     * @param MediaTransformOutput|false $thumb The thumbnail, or false if no
82     *   thumb (which can happen)
83     * @return float
84     */
85    protected function getGBWidth( $thumb ) {
86        $thumbWidth = $thumb ? $thumb->getWidth() : $this->mWidths * self::SCALE_FACTOR;
87
88        return $this->getThumbDivWidth( $thumbWidth ) + $this->getGBPadding();
89    }
90
91    protected function adjustImageParameters( $thumb, &$imageParameters ) {
92        // Re-adjust back to normal size.
93        $imageParameters['override-width'] = ceil( $thumb->getWidth() / self::SCALE_FACTOR );
94        $imageParameters['override-height'] = ceil( $thumb->getHeight() / self::SCALE_FACTOR );
95    }
96
97    /**
98     * Add javascript which auto-justifies the rows by manipulating the image sizes.
99     * Also ensures that the hover version of this degrades gracefully.
100     * @return array
101     */
102    protected function getModules() {
103        return [ 'mediawiki.page.gallery' ];
104    }
105
106    /**
107     * Do not support per-row on packed. It really doesn't work
108     * since the images have varying widths.
109     * @param int $num
110     */
111    public function setPerRow( $num ) {
112    }
113}