PackedImageGallery.php 3.4 KB

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