ImagePage: Make metadata table's initial collapse CSS-only
authorTimo Tijhof <krinklemail@gmail.com>
Tue, 5 Dec 2017 00:09:06 +0000 (00:09 +0000)
committerTimo Tijhof <krinklemail@gmail.com>
Tue, 5 Dec 2017 02:50:33 +0000 (02:50 +0000)
Make the initial collapse of the metadata table not depend on
JavaScript. This eliminates the FOUC, and will also reduce JS
footprint once compat can be removed.

* Move the 'display: none;' styles from metadata.css to
  filepage.css so that they are part of the base styles for
  file pages (metadata.css is only for supporting metadata.js,
  which is loaded dynamically).

* Apply "collapsed" class from the PHP side immediately,
  instead of calling "addClass" in JavaScript.

* Restrict hide-styles to only apply under .client-js to make
  sure the rows remain visible in no-js mode.

* Declare dependency between metadata.js and filepage.css.
  This is just for documentation purposes, as they are both
  already separately loaded on all file pages.

Change-Id: If22bf7acb47b59151dc3b0843a62507c100e548b

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

index c774eb5..1dcdc65 100644 (file)
@@ -251,12 +251,13 @@ class ImagePage extends Article {
        protected function makeMetadataTable( $metadata ) {
                $r = "<div class=\"mw-imagepage-section-metadata\">";
                $r .= $this->getContext()->msg( 'metadata-help' )->plain();
-               $r .= "<table id=\"mw_metadata\" class=\"mw_metadata\">\n";
+               // Intial state is collapsed
+               // see filepage.css and mediawiki.action.view.metadata module.
+               $r .= "<table id=\"mw_metadata\" class=\"mw_metadata collapsed\">\n";
                foreach ( $metadata as $type => $stuff ) {
                        foreach ( $stuff as $v ) {
                                $class = str_replace( ' ', '_', $v['id'] );
                                if ( $type == 'collapsed' ) {
-                                       // Handled by mediawiki.action.view.metadata module.
                                        $class .= ' mw-metadata-collapsible';
                                }
                                $r .= Html::rawElement( 'tr',
index 0e6939b..7d89f1c 100644 (file)
@@ -1498,6 +1498,7 @@ return [
                        'metadata-expand',
                        'metadata-collapse',
                ],
+               'dependencies' => 'mediawiki.action.view.filepage',
        ],
        'mediawiki.action.view.categoryPage.styles' => [
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.categoryPage.less',
index d466216..b643d76 100644 (file)
        padding-left: 5px;
        margin: 0;
 }
+
+.client-js .mw_metadata.collapsed .mw-metadata-collapsible,
+/* Keep tr.collapsible for back-compat with cached HTML */
+.client-js .mw_metadata.collapsed tr.collapsable {
+       display: none;
+}
index b9f50ac..f21b111 100644 (file)
@@ -1,12 +1,7 @@
 /*!
- * Hide collapsable rows in a collapsed table.
+ * Styles for metadata.js.
  */
 
-.mw_metadata.collapsed .mw-metadata-collapsible,
-.mw_metadata.collapsed tr.collapsable {
-       display: none;
-}
-
 /*
  * Exclude user interface elements from selection.
  */
index 7217d36..bbe3032 100644 (file)
@@ -48,7 +48,9 @@
                        );
                } );
 
-               // And collapse!
+               // Initial collapsed state
+               // (For back-compat with cached HTML from before ImagePage.php
+               // did this by default)
                $tables.addClass( 'collapsed' );
        } );