ImagePage: Clean up metadata.js collapsing
authorTimo Tijhof <krinklemail@gmail.com>
Mon, 4 Dec 2017 23:50:06 +0000 (23:50 +0000)
committerKrinkle <krinklemail@gmail.com>
Tue, 5 Dec 2017 02:49:36 +0000 (02:49 +0000)
In preparation for trying out a CSS-only approach for the initial
collapse that doesn't cause the expanded view to flash first.

Bug: T182047
Change-Id: I42941ccb05d5525599a0209f0f33db9fe836580b

includes/page/ImagePage.php
resources/src/mediawiki.action/mediawiki.action.view.metadata.css
resources/src/mediawiki.action/mediawiki.action.view.metadata.js

index 67f9e09..c774eb5 100644 (file)
@@ -257,7 +257,7 @@ class ImagePage extends Article {
                                $class = str_replace( ' ', '_', $v['id'] );
                                if ( $type == 'collapsed' ) {
                                        // Handled by mediawiki.action.view.metadata module.
-                                       $class .= ' collapsable';
+                                       $class .= ' mw-metadata-collapsible';
                                }
                                $r .= Html::rawElement( 'tr',
                                        [ 'class' => $class ],
index b07965e..b9f50ac 100644 (file)
@@ -1,7 +1,9 @@
 /*!
  * Hide collapsable rows in a collapsed table.
  */
-table.collapsed tr.collapsable {
+
+.mw_metadata.collapsed .mw-metadata-collapsible,
+.mw_metadata.collapsed tr.collapsable {
        display: none;
 }
 
@@ -9,14 +11,14 @@ table.collapsed tr.collapsable {
  * Exclude user interface elements from selection.
  */
 .mw-metadata-show-hide-extended {
-       -moz-user-select: none;
        -webkit-user-select: none;
+       -moz-user-select: none;
        -ms-user-select: none;
        user-select: none;
 }
 
 @media print {
-       tr.mw-metadata-show-hide-extended {
+       .mw_metadata .mw-metadata-show-hide-extended {
                display: none;
        }
 }
index 0d000c9..7217d36 100644 (file)
@@ -8,45 +8,48 @@
  */
 ( function ( mw, $ ) {
        $( function () {
-               var $row, $col, $link,
-                       showText = mw.msg( 'metadata-expand' ),
-                       hideText = mw.msg( 'metadata-collapse' ),
-                       $table = $( '#mw_metadata' ),
-                       $tbody = $table.find( 'tbody' );
-
-               if ( !$tbody.find( '.collapsable' ).length ) {
+               var $tables = $( '.mw_metadata' );
+               if ( !$tables.find( '.mw-metadata-collapsible, .collapsable' ).length ) {
+                       // No collapsible rows present on this page
                        return;
                }
+               $tables.each( function () {
+                       var $link,
+                               expandText = mw.msg( 'metadata-expand' ),
+                               collapseText = mw.msg( 'metadata-collapse' ),
+                               $table = $( this );
 
-               $row = $( '<tr class="mw-metadata-show-hide-extended"></tr>' );
-               $col = $( '<td colspan="2"></td>' );
-
-               $link = $( '<a>' )
-                       .text( showText )
-                       .attr( {
-                               role: 'button',
-                               tabindex: 0
-                       } )
-                       .on( 'click keypress', function ( e ) {
-                               if (
-                                       e.type === 'click' ||
-                                       e.type === 'keypress' && e.which === 13
-                               ) {
-                                       if ( $table.hasClass( 'collapsed' ) ) {
-                                               $( this ).text( hideText );
-                                       } else {
-                                               $( this ).text( showText );
+                       $link = $( '<a>' )
+                               .text( expandText )
+                               .attr( {
+                                       role: 'button',
+                                       tabindex: 0
+                               } )
+                               .on( 'click keypress', function ( e ) {
+                                       if (
+                                               e.type === 'click' ||
+                                               e.type === 'keypress' && e.which === 13
+                                       ) {
+                                               if ( $table.hasClass( 'collapsed' ) ) {
+                                                       // From collapsed to expanded. Button will now collapse.
+                                                       $( this ).text( collapseText );
+                                               } else {
+                                                       // From expanded to collapsed. Button will now expand.
+                                                       $( this ).text( expandText );
+                                               }
+                                               $table.toggleClass( 'collapsed' );
                                        }
-                                       $table.toggleClass( 'expanded collapsed' );
-                               }
-                       } );
+                               } );
 
-               $col.append( $link );
-               $row.append( $col );
-               $tbody.append( $row );
+                       $table.find( 'tbody' ).append(
+                               $( '<tr class="mw-metadata-show-hide-extended"></tr>' ).append(
+                                       $( '<td colspan="2"></td>' ).append( $link )
+                               )
+                       );
+               } );
 
                // And collapse!
-               $table.addClass( 'collapsed' );
+               $tables.addClass( 'collapsed' );
        } );
 
 }( mediaWiki, jQuery ) );