Mooeypoo has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/379273 )

Change subject: [experimental] RCFilters: Toggle the entire interface and 
lazy-load
......................................................................

[experimental] RCFilters: Toggle the entire interface and lazy-load

Allow users to hide the interface, and lazy-load it next time they
refresh the page in case they want to open it.

** This is a proposal only! DO NOT MERGE **

Change-Id: If1951844ce036ed812452e89051597ff7faebbc2
---
M includes/Preferences.php
M includes/specialpage/ChangesListSpecialPage.php
M languages/i18n/en.json
M languages/i18n/qqq.json
M resources/Resources.php
A resources/src/mediawiki.rcfilters/mw.rcfilters.lazy.js
A resources/src/mediawiki.rcfilters/styles/mw.rcfilters.lazy.less
M resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js
8 files changed, 101 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/73/379273/1

diff --git a/includes/Preferences.php b/includes/Preferences.php
index a7e6684..c0c058c 100644
--- a/includes/Preferences.php
+++ b/includes/Preferences.php
@@ -938,6 +938,9 @@
                $defaultPreferences['rcfilters-rclimit'] = [
                        'type' => 'api',
                ];
+               $defaultPreferences['rcfilters-expand-ui'] = [
+                       'type' => 'api',
+               ];
 
                if ( $config->get( 'RCWatchCategoryMembership' ) ) {
                        $defaultPreferences['hidecategorization'] = [
diff --git a/includes/specialpage/ChangesListSpecialPage.php 
b/includes/specialpage/ChangesListSpecialPage.php
index 98b7aa1..c65c41e 100644
--- a/includes/specialpage/ChangesListSpecialPage.php
+++ b/includes/specialpage/ChangesListSpecialPage.php
@@ -1422,8 +1422,14 @@
                $out->addModules( 'mediawiki.special.changeslist.legend.js' );
 
                if ( $this->isStructuredFilterUiEnabled() ) {
-                       $out->addModules( 'mediawiki.rcfilters.filters.ui' );
-                       $out->addModuleStyles( 
'mediawiki.rcfilters.filters.base.styles' );
+                       if ( $this->getUser()->getBoolOption( 
'rcfilters-expand-ui' ) ) {
+                               $out->addModules( 
'mediawiki.rcfilters.filters.ui' );
+                               $out->addModuleStyles( 
'mediawiki.rcfilters.filters.base.styles' );
+                       } else {
+                               $out->addModules( 
'mediawiki.rcfilters.filters.lazy' );
+                               $out->addModuleStyles( 
'mediawiki.rcfilters.filters.base.styles.lazy' );
+                               $out->addBodyClasses( 'rcfilters-lazyload' );
+                       }
                }
        }
 
diff --git a/languages/i18n/en.json b/languages/i18n/en.json
index 47e6205..010161e 100644
--- a/languages/i18n/en.json
+++ b/languages/i18n/en.json
@@ -1353,6 +1353,8 @@
        "recentchanges-legend-unpatrolled": 
"{{int:recentchanges-label-unpatrolled}}",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "Show",
+       "rcfilters-open-interface": "Show advanced filters interface",
+       "rcfilters-hide-interface": "Hide interface",
        "rcfilters-tag-remove": "Remove '$1'",
        "rcfilters-legend-heading": "<strong>List of abbreviations:</strong>",
        "rcfilters-other-review-tools": "<strong>Other review tools</strong>",
diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json
index 0a6e91b..230d169 100644
--- a/languages/i18n/qqq.json
+++ b/languages/i18n/qqq.json
@@ -1545,6 +1545,8 @@
        "recentchanges-legend-unpatrolled": "Used as legend on 
[[Special:RecentChanges]] and [[Special:Watchlist]].\n\nRefers to 
{{msg-mw|Recentchanges-label-unpatrolled}}.",
        "recentchanges-legend-plusminus": "{{optional}}\nA plus/minus sign with 
a number for the legend.",
        "recentchanges-submit": "Label for submit button in 
[[Special:RecentChanges]]\n{{Identical|Show}}",
+       "rcfilters-open-interface": "Text for a link to show advanced filters 
interface on [[Special:RecentChanges]] and [[Special:Watchlist]]",
+       "rcfilters-hide-interface": "Text for a button to hide advanced filters 
interface on [[Special:RecentChanges]] and [[Special:Watchlist]]",
        "rcfilters-tag-remove": "A tooltip for the button that removes a filter 
from the active filters area in [[Special:RecentChanges]] and 
[[Special:Watchlist]] when RCFilters are enabled. \n\nParameters: $1 - Tag 
label",
        "rcfilters-legend-heading": "Used as a heading for legend box on 
[[Special:RecentChanges]] and [[Special:Watchlist]] when RCFilters are 
enabled.",
        "rcfilters-other-review-tools": "Used as a heading for the community 
collection of other links on [[Special:RecentChanges]] when RCFilters are 
enabled.",
diff --git a/resources/Resources.php b/resources/Resources.php
index 818112f..4e0892e 100644
--- a/resources/Resources.php
+++ b/resources/Resources.php
@@ -1756,6 +1756,11 @@
                        
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.less',
                ],
        ],
+       'mediawiki.rcfilters.filters.base.styles.lazy' => [
+               'styles' => [
+                       
'resources/src/mediawiki.rcfilters/styles/mw.rcfilters.lazy.less',
+               ],
+       ],
        'mediawiki.rcfilters.highlightCircles.seenunseen.styles' => [
                'styles' => [
                        'resources/src/mediawiki.rcfilters/' .
@@ -1782,6 +1787,14 @@
                        'mediawiki.api.options',
                        'mediawiki.Uri',
                        'mediawiki.user',
+               ],
+       ],
+       'mediawiki.rcfilters.filters.lazy' => [
+               'scripts' => [
+                       
'resources/src/mediawiki.rcfilters/mw.rcfilters.lazy.js',
+               ],
+               'messages' => [
+                       'rcfilters-open-interface'
                ],
        ],
        'mediawiki.rcfilters.filters.ui' => [
@@ -1851,6 +1864,7 @@
                        ],
                ],
                'messages' => [
+                       'rcfilters-hide-interface',
                        'rcfilters-tag-remove',
                        'rcfilters-activefilters',
                        'rcfilters-advancedfilters',
@@ -1917,6 +1931,7 @@
                        'quotation-marks',
                ],
                'dependencies' => [
+                       'mediawiki.rcfilters.filters.base.styles.lazy',
                        'oojs-ui',
                        'jquery.makeCollapsible',
                        'mediawiki.language',
diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.lazy.js 
b/resources/src/mediawiki.rcfilters/mw.rcfilters.lazy.js
new file mode 100644
index 0000000..5cadfb0
--- /dev/null
+++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.lazy.js
@@ -0,0 +1,25 @@
+/*!
+ * JavaScript for Special:RecentChanges
+ */
+( function ( mw, $ ) {
+       var $link = $( '<a>' )
+               .text( mw.msg( 'rcfilters-open-interface' ) )
+               .on( 'click', function () {
+
+                       mw.loader.using( [ 'mediawiki.rcfilters.filters.ui', 
'mediawiki.rcfilters.filters.base.styles' ] )
+                               .then( function () {
+                                       $( 'body' ).removeClass( 
'rcfilters-lazyload' );
+
+                                       // Update user option
+                                       new mw.Api().saveOption( 
'rcfilters-expand-ui', 1 );
+                                       // Update the preference for this 
session
+                                       mw.user.options.set( 
'rcfilters-expand-ui', 1 );
+
+                                       $link.detach();
+                               } );
+
+                       return false;
+               } );
+
+       $( '.rcfilters-head' ).append( $link );
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.lazy.less 
b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.lazy.less
new file mode 100644
index 0000000..9ddb431
--- /dev/null
+++ b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.lazy.less
@@ -0,0 +1,8 @@
+.client-js {
+       .rcfilters-lazyload {
+               .rcfilters-container,
+               .cloptions {
+                       display: none;
+               }
+       }
+}
\ No newline at end of file
diff --git 
a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js 
b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js
index db7acaa..ec8a2fb 100644
--- 
a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js
+++ 
b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js
@@ -29,6 +29,7 @@
                this.model = model;
                this.queriesModel = savedQueriesModel;
                this.$overlay = config.$overlay || this.$element;
+               this.uiOpen = true;
 
                this.filterTagWidget = new 
mw.rcfilters.ui.FilterTagMultiselectWidget(
                        this.controller,
@@ -57,6 +58,13 @@
                                $overlay: this.$overlay
                        }
                );
+
+               this.toggleUIButton = new OO.ui.ButtonWidget( {
+                               label: mw.msg( 'rcfilters-hide-interface' )
+                       } );
+
+               // Events
+               this.toggleUIButton.connect( this, { click: 'onToggleUIButton' 
} );
 
                // Initialize
                this.$top = $( '<div>' )
@@ -96,5 +104,35 @@
         */
        mw.rcfilters.ui.FilterWrapperWidget.prototype.setTopSection = function 
( $topSectionElement ) {
                this.$top.append( $topSectionElement );
+
+               // Add 'hide inteface' button
+               $topSectionElement.find( '.mw-rcfilters-ui-row' ).prepend(
+                       $( '<td>' )
+                               .addClass( 'mw-rcfilters-ui-cell' )
+                               .append( this.toggleUIButton.$element )
+               );
+       };
+
+       mw.rcfilters.ui.FilterWrapperWidget.prototype.onToggleUIButton = 
function () {
+               var $link,
+                       $rchead = $( '.rcfilters-head' ),
+                       $link = $rchead.find( 
'.mw-rcfilters-ui-filterWrapperWidget-hideUIButton' );
+
+               if ( !$link.length ) {
+                       $link = $( '<a>' )
+                               .addClass( 
'mw-rcfilters-ui-filterWrapperWidget-hideUIButton' )
+                               .text( mw.msg( 'rcfilters-open-interface' ) )
+                               .on( 'click', this.onToggleUIButton.bind( this 
) );
+                       $rchead.append( $link );
+               }
+               this.uiOpen = !this.uiOpen;
+
+               $link.toggleClass( 'oo-ui-element-hidden', this.uiOpen );
+               $( 'body' ).toggleClass( 'rcfilters-lazyload', !this.uiOpen );
+
+               // Update user option
+               new mw.Api().saveOption( 'rcfilters-expand-ui', Number( 
this.uiOpen ) );
+               // Update the preference for this session
+               mw.user.options.set( 'rcfilters-expand-ui', Number( this.uiOpen 
) );
        };
 }( mediaWiki ) );

-- 
To view, visit https://gerrit.wikimedia.org/r/379273
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If1951844ce036ed812452e89051597ff7faebbc2
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Mooeypoo <mor...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to