Remove m prefixes from private variables
[lhc/web/wiklou.git] / resources / mediawiki.page / mediawiki.page.gallery.js
index fd2af40..147a869 100644 (file)
@@ -94,7 +94,9 @@
                                        $caption,
                                        hookInfo,
                                        i,
-                                       j;
+                                       j,
+                                       avgZoom,
+                                       totalZoom = 0;
 
                                for ( i = 0; i < rows.length; i++ ) {
                                        maxWidth = $gallery.width();
                                                // code, would prevent accidentally expanding to
                                                // be 10 billion pixels wide.
                                                mw.log( 'mw.page.gallery: Cannot fit row, aspect is ' + preferredHeight/curRowHeight );
-                                               preferredHeight = 1.5 * curRowHeight;
+                                               if ( i === rows.length - 1 ) {
+                                                       // If its the last row, and we can't fit it,
+                                                       // don't make the entire row huge.
+                                                       avgZoom = ( totalZoom / ( rows.length - 1 ) ) * curRowHeight;
+                                                       if ( isFinite( avgZoom ) && avgZoom >= 1 && avgZoom <= 1.5 ) {
+                                                               preferredHeight = avgZoom;
+                                                       } else {
+                                                               // Probably a single row gallery
+                                                               preferredHeight = curRowHeight;
+                                                       }
+                                               } else {
+                                                       preferredHeight = 1.5 * curRowHeight;
+                                               }
                                        }
                                        if ( !isFinite( preferredHeight ) ) {
                                                // This *definitely* should not happen.
                                                // Skip this row.
                                                continue;
                                        }
+
+                                       if ( preferredHeight / curRowHeight > 1 ) {
+                                               totalZoom += preferredHeight / curRowHeight;
+                                       } else {
+                                               // If we shrink, still consider that a zoom of 1
+                                               totalZoom += 1;
+                                       }
+
                                        for ( j = 0; j < curRow.length; j++ ) {
                                                newWidth = preferredHeight * curRow[j].aspect;
                                                padding = curRow[j].width - curRow[j].imgWidth;
                                                        $innerDiv: $innerDiv,
                                                        $imageDiv: $imageDiv,
                                                        $outerDiv: $outerDiv,
-                                                       resolved: false  /* Did the hook take action */
+                                                       // Whether the hook took action
+                                                       resolved: false
                                                };
-                                               // Allow other media handlers to hook in.
-                                               // If your hook resizes an image, it is expected it will
-                                               // set resolved to true. Additionally you should load
-                                               // your module in position top to ensure it is registered
-                                               // before this runs (FIXME: there must be a better way?)
-                                               // See TimedMediaHandler for an example.
+
+                                               /**
+                                                * Gallery resize.
+                                                *
+                                                * If your handler resizes an image, it should also set the resolved
+                                                * property to true. Additionally, because this module only exposes this
+                                                * logic temporarily, you should load your module in position top to
+                                                * ensure it is registered before this runs (FIXME: Don't use mw.hook)
+                                                *
+                                                * See TimedMediaHandler for an example.
+                                                *
+                                                * @event mediawiki_page_gallery_resize
+                                                * @member mw.hook
+                                                * @param {Object} hookInfo
+                                                */
                                                mw.hook( 'mediawiki.page.gallery.resize' ).fire( hookInfo );
 
                                                if ( !hookInfo.resolved ) {