* (bug 6987) Allow perrow, widths, and heights attributes for <gallery> (I deliberate...
authorAryeh Gregor <simetrical@users.mediawiki.org>
Fri, 2 Feb 2007 03:32:03 +0000 (03:32 +0000)
committerAryeh Gregor <simetrical@users.mediawiki.org>
Fri, 2 Feb 2007 03:32:03 +0000 (03:32 +0000)
* Convert <gallery> caption to, well, a <caption>

RELEASE-NOTES
includes/ImageGallery.php
includes/Parser.php
skins/monobook/main.css

index 66d82b0..0673d18 100644 (file)
@@ -160,6 +160,7 @@ lighter making things easier to read.
 * (bug 8711) Stop floats in previews from spilling into edit area
 * (bug 8535) Allow certain vertical alignment attributes to be used as image
   keywords
+* (bug 6987) Allow perrow, widths, and heights attributes for <gallery>
 
 
 == Languages updated ==
index 09cbd07..c9eb96a 100644 (file)
@@ -16,18 +16,21 @@ class ImageGallery
        var $mImages, $mShowBytes, $mShowFilename;
        var $mCaption = false;
        var $mSkin = false;
-       
+
        /**
         * Is the gallery on a wiki page (i.e. not a special page)
         */
        var $mParsing;
-       
+
        /**
         * Contextual title, used when images are being screened
         * against the bad image list
         */
        private $contextTitle = false;
 
+       private $mPerRow = 4; // How many images wide should the gallery be?
+       private $mWidths = 120, $mHeights = 120; // How wide/tall each thumbnail should be
+
        /**
         * Create a new image gallery object.
         */
@@ -44,7 +47,7 @@ class ImageGallery
        function setParsing( $val = true ) {
                $this->mParsing = $val;
        }
-       
+
        /**
         * Set the caption (as plain text)
         *
@@ -53,16 +56,49 @@ class ImageGallery
        function setCaption( $caption ) {
                $this->mCaption = htmlspecialchars( $caption );
        }
-       
+
        /**
         * Set the caption (as HTML)
         *
         * @param $caption Caption
         */
-       function setCaptionHtml( $caption ) {
+       public function setCaptionHtml( $caption ) {
                $this->mCaption = $caption;
        }
 
+       /**
+        * Set how many images will be displayed per row.
+        *
+        * @param int $num > 0; invalid numbers will be rejected
+        */
+       public function setPerRow( $num ) {
+               if ($num > 0) {
+                       $this->mPerRow = (int)$num;
+               }
+       }
+
+       /**
+        * Set how wide each image will be, in pixels.
+        *
+        * @param int $num > 0; invalid numbers will be ignored
+        */
+       public function setWidths( $num ) {
+               if ($num > 0) {
+                       $this->mWidths = (int)$num;
+               }
+       }
+
+       /**
+        * Set how high each image will be, in pixels.
+        *
+        * @param int $num > 0; invalid numbers will be ignored
+        */
+       public function setHeights( $num ) {
+               if ($num > 0) {
+                       $this->mHeights = (int)$num;
+               }
+       }
+
        /**
         * Instruct the class to use a specific skin for rendering
         *
@@ -71,7 +107,7 @@ class ImageGallery
        function useSkin( $skin ) {
                $this->mSkin = $skin;
        }
-       
+
        /**
         * Return the skin that should be used
         *
@@ -153,8 +189,8 @@ class ImageGallery
 
                $s = '<table class="gallery" cellspacing="0" cellpadding="0">';
                if( $this->mCaption )
-                       $s .= '<td class="galleryheader" colspan="4"><big>' . $this->mCaption . '</big></td>';
-               
+                       $s .= "\n\t<caption>{$this->mCaption}</caption>";
+
                $i = 0;
                foreach ( $this->mImages as $pair ) {
                        $img =& $pair[0];
@@ -164,18 +200,19 @@ class ImageGallery
 
                        if( $nt->getNamespace() != NS_IMAGE ) {
                                # We're dealing with a non-image, spit out the name and be done with it.
-                               $thumbhtml = '<div style="height: 152px;">' . htmlspecialchars( $nt->getText() ) . '</div>';
+                               $thumbhtml = "\n\t\t\t".'<div style="height: '.($this->mHeights*1.25+2).'px;">'
+                                       . htmlspecialchars( $nt->getText() ) . '</div>';
                        } elseif( $this->mParsing && wfIsBadImage( $nt->getDBkey(), $this->getContextTitle() ) ) {
                                # The image is blacklisted, just show it as a text link.
-                               $thumbhtml = '<div style="height: 152px;">'
+                               $thumbhtml = "\n\t\t\t".'<div style="height: '.($this->mHeights*1.25+2).'px;">'
                                        . $sk->makeKnownLinkObj( $nt, htmlspecialchars( $nt->getText() ) ) . '</div>';
-                       } else if( !( $thumb = $img->getThumbnail( 120, 120, $wgGenerateThumbnailOnParse ) ) ) {
+                       } elseif( !( $thumb = $img->getThumbnail( $this->mWidths, $this->mHeights, $wgGenerateThumbnailOnParse ) ) ) {
                                # Error generating thumbnail.
-                               $thumbhtml = '<div style="height: 152px;">'
+                               $thumbhtml = "\n\t\t\t".'<div style="height: '.($this->mHeights*1.25+2).'px;">'
                                        . htmlspecialchars( $img->getLastError() ) . '</div>';
                        } else {
-                               $vpad = floor( ( 150 - $thumb->height ) /2 ) - 2;
-                               $thumbhtml = '<div class="thumb" style="padding: ' . $vpad . 'px 0;">'
+                               $vpad = floor( ( 1.25*$this->mHeights - $thumb->height ) /2 ) - 2;
+                               $thumbhtml = "\n\t\t\t".'<div class="thumb" style="padding: ' . $vpad . 'px 0; width: '.($this->mWidths+30).';">'
                                        . $sk->makeKnownLinkObj( $nt, $thumb->toHtml() ) . '</div>';
                        }
 
@@ -202,21 +239,29 @@ class ImageGallery
                        # in version 4.8.6 generated crackpot html in its absence, see:
                        # http://bugzilla.wikimedia.org/show_bug.cgi?id=1765 -Ævar
 
-                       $s .= ($i%4==0) ? '<tr>' : '';
-                       $s .= '<td><div class="gallerybox">' . $thumbhtml
-                               . '<div class="gallerytext">' . "\n" . $textlink . $text . $nb
-                               . "</div></div></td>\n";
-                       $s .= ($i%4==3) ? '</tr>' : '';
-                       $i++;
+                       if ( $i % $this->mPerRow == 0 ) {
+                               $s .= "\n\t<tr>";
+                       }
+                       $s .=
+                               "\n\t\t" . '<td><div class="gallerybox" style="width: '.($this->mWidths*1.25).'px;">'
+                                       . $thumbhtml
+                                       . "\n\t\t\t" . '<div class="gallerytext">' . "\n"
+                                               . $textlink . $text . $nb
+                                       . "\n\t\t\t</div>"
+                               . "\n\t\t</div></td>";
+                       if ( $i % $this->mPerRow == $this->mPerRow - 1 ) {
+                               $s .= "\n\t</tr>";
+                       }
+                       ++$i;
                }
-               if( $i %4 != 0 ) {
-                       $s .= "</tr>\n";
+               if( $i % $this->mPerRow != 0 ) {
+                       $s .= "\n\t</tr>";
                }
-               $s .= '</table>';
+               $s .= "\n</table>";
 
                return $s;
        }
-       
+
        /**
         * @return int Number of images in the gallery
         */
index 590c08a..66d6eb1 100644 (file)
@@ -4310,6 +4310,15 @@ class Parser
                        $caption = $this->replaceInternalLinks( $caption );
                        $ig->setCaptionHtml( $caption );
                }
+               if( isset( $params['perrow'] ) ) {
+                       $ig->setPerRow( $params['perrow'] );
+               }
+               if( isset( $params['widths'] ) ) {
+                       $ig->setWidths( $params['widths'] );
+               }
+               if( isset( $params['heights'] ) ) {
+                       $ig->setHeights( $params['heights'] );
+               }
 
                $lines = explode( "\n", $text );
                foreach ( $lines as $line ) {
index 3bf74e2..8b6a39f 100644 (file)
@@ -1301,14 +1301,12 @@ table.gallery td {
        border: solid 2px white;
 }
 
-table.gallery td.galleryheader {
-       text-align: center;
+table.gallery caption {
        font-weight: bold;
 }
 
 div.gallerybox {
        margin: 2px;
-       width:  150px;
 }
 
 div.gallerybox div.thumb {