Give image <gallery>s fluid width

Bug 3276.  Patch by DieBuche, with style cleanups by me, plus a tweak
from comment 27 of the bug to fix spacing.  This incidentally removes
the border around galleries, but this was hard to notice anyway, and
could be easily readded if desired.  Tested in a few browsers, including
IE6, but more testing and/or input from CSS gurus would be appreciated.

Updates parser tests, including for Cite.
This commit is contained in:
Aryeh Gregor 2010-11-29 00:11:19 +00:00
parent 57b42fb1c0
commit 05579cf0e6
6 changed files with 79 additions and 85 deletions

View file

@ -85,6 +85,7 @@ following names for their contribution to the product.
* Daniel Arnold
* Denny Vrandecic
* Derk-Jan Hartman
* DieBuche
* FunPika
* Ireas
* Jaska Zedlik

View file

@ -213,6 +213,7 @@ LocalSettings.php. The specific bugs are listed below in the general notes.
[[MediaWiki:Longpage-hint]] (empty per default) can be used instead.
Parameters: $1 shows the formatted textsize in Byte/KB/MB, $2 is the raw
number of the textsize in Byte
* (bug 3276) Give image <gallery>s fluid width
=== Bug fixes in 1.17 ===
* (bug 17560) Half-broken deletion moved image files to deletion archive

View file

@ -886,7 +886,7 @@ $wgThumbLimits = array(
* Default parameters for the <gallery> tag
*/
$wgGalleryOptions = array (
'imagesPerRow' => 4, // Default number of images per-row in the gallery
'imagesPerRow' => 0, // Default number of images per-row in the gallery. 0 -> Adapt to screensize
'imageWidth' => 120, // Width of the cells containing images in galleries (in "px")
'imageHeight' => 120, // Height of the cells containing images in galleries (in "px")
'captionLength' => 20, // Length of caption to truncate (in characters)

View file

@ -85,10 +85,11 @@ class ImageGallery
/**
* Set how many images will be displayed per row.
*
* @param $num Integer > 0; invalid numbers will be rejected
* @param $num Integer >= 0; If perrow=0 the gallery layout will adapt to screensize
* invalid numbers will be rejected
*/
public function setPerRow( $num ) {
if ($num > 0) {
if ($num >= 0) {
$this->mPerRow = (int)$num;
}
}
@ -198,7 +199,7 @@ class ImageGallery
/**
* Set arbitrary attributes to go on the HTML gallery output element.
* Should be suitable for a &lt;table&gt; element.
* Should be suitable for a <ul> element.
*
* Note -- if taking from user input, you should probably run through
* Sanitizer::validateAttributes() first.
@ -224,15 +225,19 @@ class ImageGallery
$sk = $this->getSkin();
if ( $this->mPerRow > 0 ) {
$maxwidth = $this->mPerRow * ( $this->mWidths + 50 );
$this->mAttribs['style'] = "max-width: {$maxwidth}px;_width: {$maxwidth}px;";
}
$attribs = Sanitizer::mergeAttributes(
array(
'class' => 'gallery',
'cellspacing' => '0',
'cellpadding' => '0' ),
'class' => 'gallery'),
$this->mAttribs );
$s = Xml::openElement( 'table', $attribs );
if( $this->mCaption )
$s .= "\n\t<caption>{$this->mCaption}</caption>";
$s = Xml::openElement( 'ul', $attribs );
if ( $this->mCaption ) {
$s .= "\n\t<li class='gallerycaption'>{$this->mCaption}</li>";
}
$params = array( 'width' => $this->mWidths, 'height' => $this->mHeights );
$i = 0;
@ -325,25 +330,19 @@ class ImageGallery
# in version 4.8.6 generated crackpot html in its absence, see:
# http://bugzilla.wikimedia.org/show_bug.cgi?id=1765 -Ævar
if ( $i % $this->mPerRow == 0 ) {
$s .= "\n\t<tr>";
}
# Weird double wrapping in div needed due to FF2 bug
# Can be safely removed if FF2 falls completely out of existance
$s .=
"\n\t\t" . '<td><div class="gallerybox" style="width: '.($this->mWidths+35).'px;">'
"\n\t\t" . '<li class="gallerybox" style="width: ' . ( $this->mWidths + 35 ) . 'px">'
. '<div style="width: ' . ( $this->mWidths + 35 ) . '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>";
}
. "\n\t\t</div></li>";
++$i;
}
if( $i % $this->mPerRow != 0 ) {
$s .= "\n\t</tr>";
}
$s .= "\n</table>";
$s .= "\n</ul>";
return $s;
}

View file

@ -6607,48 +6607,44 @@ image4 |300px| centre
* image6
</gallery>
!! result
<table class="gallery" cellspacing="0" cellpadding="0">
<tr>
<td><div class="gallerybox" style="width: 155px;">
<ul class="gallery">
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
<div style="height: 152px;">Image1.png</div>
<div class="gallerytext">
</div>
</div></td>
<td><div class="gallerybox" style="width: 155px;">
</div></li>
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
<div style="height: 152px;">Image2.gif</div>
<div class="gallerytext">
<p>||||
</p>
</div>
</div></td>
<td><div class="gallerybox" style="width: 155px;">
</div></li>
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
<div style="height: 152px;">Image3</div>
<div class="gallerytext">
</div>
</div></td>
<td><div class="gallerybox" style="width: 155px;">
</div></li>
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
<div style="height: 152px;">Image4</div>
<div class="gallerytext">
<p>300px| centre
</p>
</div>
</div></td>
</tr>
<tr>
<td><div class="gallerybox" style="width: 155px;">
</div></li>
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
<div style="height: 152px;">Image5.svg</div>
<div class="gallerytext">
<p><a href="http://///////" class="external free" rel="nofollow">http://///////</a>
</p>
</div>
</div></td>
<td><div class="gallerybox" style="width: 155px;">
</div></li>
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
<div style="height: 152px;">* image6</div>
<div class="gallerytext">
</div>
</div></td>
</tr>
</table>
</div></li>
</ul>
!! end
@ -6662,37 +6658,33 @@ image:foobar.jpg|some '''caption''' [[Main Page]]
image:foobar.jpg
</gallery>
!! result
<table class="gallery" cellspacing="0" cellpadding="0">
<caption>Foo <a href="/wiki/Main_Page">Main Page</a></caption>
<tr>
<td><div class="gallerybox" style="width: 95px;">
<ul class="gallery" style="max-width: 220px;_width: 220px;">
<li class='gallerycaption'>Foo <a href="/wiki/Main_Page">Main Page</a></li>
<li class="gallerybox" style="width: 95px"><div style="width: 95px">
<div style="height: 52px;">Nonexistant.jpg</div>
<div class="gallerytext">
<p>caption
</p>
</div>
</div></td>
<td><div class="gallerybox" style="width: 95px;">
</div></li>
<li class="gallerybox" style="width: 95px"><div style="width: 95px">
<div style="height: 52px;">Nonexistant.jpg</div>
<div class="gallerytext">
</div>
</div></td>
</tr>
<tr>
<td><div class="gallerybox" style="width: 95px;">
</div></li>
<li class="gallerybox" style="width: 95px"><div style="width: 95px">
<div class="thumb" style="padding: 19px 0; width: 90px;"><div style="margin-left: auto; margin-right: auto; width: 60px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="60" height="7" /></a></div></div>
<div class="gallerytext">
<p>some <b>caption</b> <a href="/wiki/Main_Page">Main Page</a>
</p>
</div>
</div></td>
<td><div class="gallerybox" style="width: 95px;">
</div></li>
<li class="gallerybox" style="width: 95px"><div style="width: 95px">
<div class="thumb" style="padding: 19px 0; width: 90px;"><div style="margin-left: auto; margin-right: auto; width: 60px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="60" height="7" /></a></div></div>
<div class="gallerytext">
</div>
</div></td>
</tr>
</table>
</div></li>
</ul>
!! end
@ -6706,40 +6698,38 @@ image:foobar.jpg|some '''caption''' [[Main Page]]
File:Foobar.jpg
</gallery>
!! result
<table class="gallery" cellspacing="0" cellpadding="0">
<tr>
<td><div class="gallerybox" style="width: 155px;">
<ul class="gallery">
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
<div style="height: 152px;">Nonexistant.jpg</div>
<div class="gallerytext">
<p><a href="/wiki/File:Nonexistant.jpg" title="File:Nonexistant.jpg">Nonexistant.jpg</a><br />
caption
</p>
</div>
</div></td>
<td><div class="gallerybox" style="width: 155px;">
</div></li>
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
<div style="height: 152px;">Nonexistant.jpg</div>
<div class="gallerytext">
<p><a href="/wiki/File:Nonexistant.jpg" title="File:Nonexistant.jpg">Nonexistant.jpg</a><br />
</p>
</div>
</div></td>
<td><div class="gallerybox" style="width: 155px;">
</div></li>
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
<div class="thumb" style="padding: 66px 0; width: 150px;"><div style="margin-left: auto; margin-right: auto; width: 120px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/3/3a/Foobar.jpg" width="120" height="14" /></a></div></div>
<div class="gallerytext">
<p><a href="/wiki/File:Foobar.jpg" title="File:Foobar.jpg">Foobar.jpg</a><br />
some <b>caption</b> <a href="/wiki/Main_Page">Main Page</a>
</p>
</div>
</div></td>
<td><div class="gallerybox" style="width: 155px;">
</div></li>
<li class="gallerybox" style="width: 155px"><div style="width: 155px">
<div class="thumb" style="padding: 66px 0; width: 150px;"><div style="margin-left: auto; margin-right: auto; width: 120px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="Foobar.jpg" src="http://example.com/images/3/3a/Foobar.jpg" width="120" height="14" /></a></div></div>
<div class="gallerytext">
<p><a href="/wiki/File:Foobar.jpg" title="File:Foobar.jpg">Foobar.jpg</a><br />
</p>
</div>
</div></td>
</tr>
</table>
</div></li>
</ul>
!! end

View file

@ -786,31 +786,34 @@ table.mw_metadata td {
}
/* Galleries */
table.gallery {
border: 1px solid #ccc;
margin: 2px;
padding: 2px;
background-color: white;
}
table.gallery tr {
vertical-align: top;
}
table.gallery td {
/* These display attributes look nonsensical, but are needed to support IE and FF2 */
li.gallerybox {
vertical-align: top;
background-color: #f9f9f9;
border: solid 2px white;
display: -moz-inline-box;
}
table.gallery caption {
font-weight: bold;
}
div.gallerybox {
ul.gallery {
margin: 2px;
padding: 2px;
background-color: white;
display: block;
}
div.gallerybox div.thumb {
ul.gallery, li.gallerybox {
display: inline-block;
zoom: 1;
*display: inline;
}
li.gallerycaption {
font-weight: bold;
text-align: center;
display: block;
word-wrap: break-word;
}
li.gallerybox div.thumb {
text-align: center;
border: 1px solid #ccc;
margin: 2px;