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

Change subject: [WIP] WLFilters: convert 'edit watchlist' button to new UX
......................................................................

[WIP] WLFilters: convert 'edit watchlist' button to new UX

Bug: T172030
Change-Id: Ifcde40c66fbb6543d4f2aebfc8499c03533b8b91
---
M includes/specials/SpecialWatchlist.php
M languages/i18n/en.json
M languages/i18n/qqq.json
M resources/Resources.php
M resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
M 
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterWrapperWidget.less
M 
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListWidget.less
A 
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.EditWatchlistButtonWidget.js
M resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js
9 files changed, 132 insertions(+), 47 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/core 
refs/changes/15/374415/1

diff --git a/includes/specials/SpecialWatchlist.php 
b/includes/specials/SpecialWatchlist.php
index 862863a..0336e8e 100644
--- a/includes/specials/SpecialWatchlist.php
+++ b/includes/specials/SpecialWatchlist.php
@@ -104,6 +104,10 @@
                                
'wgStructuredChangeFiltersSavedQueriesPreferenceName',
                                'rcfilters-wl-saved-queries'
                        );
+                       $output->addJsConfigVars(
+                               'wgStructuredChangeFiltersWatchlistItemCount',
+                               $this->countItems()
+                       );
                }
        }
 
@@ -795,21 +799,25 @@
                $showUpdatedMarker = $this->getConfig()->get( 
'ShowUpdatedMarker' );
 
                // Show watchlist header
-               $form .= "<p>";
+               $watchlistHeader = '';
                if ( $numItems == 0 ) {
-                       $form .= $this->msg( 'nowatchlist' )->parse() . "\n";
+                       $watchlistHeader .= $this->msg( 'nowatchlist' 
)->parse() . "\n";
                } else {
-                       $form .= $this->msg( 'watchlist-details' )->numParams( 
$numItems )->parse() . "\n";
+                       $watchlistHeader .= $this->msg( 'watchlist-details' 
)->numParams( $numItems )->parse() . "\n";
                        if ( $this->getConfig()->get( 'EnotifWatchlist' )
                                && $user->getOption( 'enotifwatchlistpages' )
                        ) {
-                               $form .= $this->msg( 'wlheader-enotif' 
)->parse() . "\n";
+                               $watchlistHeader .= $this->msg( 
'wlheader-enotif' )->parse() . "\n";
                        }
                        if ( $showUpdatedMarker ) {
-                               $form .= $this->msg( 'wlheader-showupdated' 
)->parse() . "\n";
+                               $watchlistHeader .= $this->msg( 
'wlheader-showupdated' )->parse() . "\n";
                        }
                }
-               $form .= "</p>";
+               $form .= Html::rawElement(
+                       'p',
+                       [ 'class' => 'watchlistDetails' ],
+                       $watchlistHeader
+               );
 
                if ( $numItems > 0 && $showUpdatedMarker ) {
                        $form .= Xml::openElement( 'form', [ 'method' => 'post',
diff --git a/languages/i18n/en.json b/languages/i18n/en.json
index a44b3cf..196614a 100644
--- a/languages/i18n/en.json
+++ b/languages/i18n/en.json
@@ -1469,6 +1469,8 @@
        "rcfilters-liveupdates-button-title-on": "Turn off live updates",
        "rcfilters-liveupdates-button-title-off": "Display new changes as they 
happen",
        "rcfilters-watchlist-markSeen-button": "Mark all changes as seen",
+       "rcfilters-watchlist-editWatchlist-button": "Edit your list of watched 
pages",
+       "rcfilters-watchlist-details": "{{PLURAL:$1|$1 page|$1 pages}} on your 
watchlist (plus talk pages). ",
        "rcnotefrom": "Below {{PLURAL:$5|is the change|are the changes}} since 
<strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
        "rclistfromreset": "Reset date selection",
        "rclistfrom": "Show new changes starting from $2, $3",
diff --git a/languages/i18n/qqq.json b/languages/i18n/qqq.json
index 036a941..294df43 100644
--- a/languages/i18n/qqq.json
+++ b/languages/i18n/qqq.json
@@ -1659,6 +1659,8 @@
        "rcfilters-liveupdates-button-title-on": "Title for the button to 
enable or disable live updates on [[Special:RecentChanges]] when the feature is 
ON.",
        "rcfilters-liveupdates-button-title-off": "Title for the button to 
enable or disable live updates on [[Special:RecentChanges]] when the feature is 
OFF.",
        "rcfilters-watchlist-markSeen-button": "Label for the button to mark 
all changes as seen on [[Special:Watchlist]] when using the structured filters 
interface.",
+       "rcfilters-watchlist-editWatchlist-button": "Label for the button to 
edit the watched pages on [[Special:Watchlist]] when using the structured 
filters interface.",
+       "rcfilters-watchlist-details" : "Status message on 
[[Special:Watchlist]] about how many pages are on the watchlist and how to 
identify new changes. Parameters:\n* $1 - number of pages in your watchlist",
        "rcnotefrom": "This message is displayed at [[Special:RecentChanges]] 
when viewing recentchanges from some specific time.\n\nThe corresponding 
message is {{msg-mw|Rclistfrom}}.\n\nParameters:\n* $1 - the maximum number of 
changes that are displayed\n* $2 - (Optional) a date and time\n* $3 - a date\n* 
$4 - a time\n* $5 - Number of changes are displayed, for use with PLURAL",
        "rclistfromreset": "Used on [[Special:RecentChanges]] to reset a 
selection of a certain date range.",
        "rclistfrom": "Used on [[Special:RecentChanges]]. Parameters:\n* $1 - 
(Currently not use) date and time. The date and the time adds to the rclistfrom 
description.\n* $2 - time. The time adds to the rclistfrom link description 
(with split of date and time).\n* $3 - date. The date adds to the rclistfrom 
link description (with split of date and time).\n\nThe corresponding message is 
{{msg-mw|Rcnotefrom}}.",
diff --git a/resources/Resources.php b/resources/Resources.php
index 459ad83..ff47fa3 100644
--- a/resources/Resources.php
+++ b/resources/Resources.php
@@ -1802,6 +1802,7 @@
                        
'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.HighlightColorPickerWidget.js',
                        
'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.LiveUpdateButtonWidget.js',
                        
'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.MarkSeenButtonWidget.js',
+                       
'resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.EditWatchlistButtonWidget.js',
                        
'resources/src/mediawiki.rcfilters/mw.rcfilters.HighlightColors.js',
                        
'resources/src/mediawiki.rcfilters/mw.rcfilters.init.js',
                ],
@@ -1895,6 +1896,8 @@
                        'rcfilters-liveupdates-button-title-on',
                        'rcfilters-liveupdates-button-title-off',
                        'rcfilters-watchlist-markSeen-button',
+                       'rcfilters-watchlist-editWatchlist-button',
+                       'rcfilters-watchlist-details',
                        'rcfilters-other-review-tools',
                        'blanknamespace',
                        'namespaces',
diff --git a/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js 
b/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
index a6bce14..fc0eca3 100644
--- a/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
+++ b/resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
@@ -26,7 +26,12 @@
                                        .addClass( 'mw-rcfilters-ui-overlay' ),
                                filtersWidget = new 
mw.rcfilters.ui.FilterWrapperWidget(
                                        controller, filtersModel, 
savedQueriesModel, changesListModel, { $overlay: $overlay } ),
+                               savedLinksListWidget  = new 
mw.rcfilters.ui.SavedLinksListWidget(
+                                       controller, savedQueriesModel, { 
$overlay: $overlay }
+                               ),
                                markSeenButton,
+                               editWatchlistButton,
+                               watchlistDetails,
                                currentPage = mw.config.get( 
'wgCanonicalNamespace' ) +
                                        ':' +
                                        mw.config.get( 
'wgCanonicalSpecialPageName' );
@@ -83,12 +88,71 @@
                                                toplinksTitle.setIndicator( 
'down' );
                                        } )
                                        .appendTo( 
'.mw-rcfilters-ui-filterWrapperWidget-top-placeholder' );
+
+                               filtersWidget.setTopRows(
+                                       $( '<div>' )
+                                               .addClass( 
'mw-rcfilters-ui-row' )
+                                               .append(
+                                                       $( '<div>' )
+                                                               .addClass( 
'mw-rcfilters-ui-cell' )
+                                                               .addClass( 
'mw-rcfilters-ui-filterWrapperWidget-top-placeholder' )
+                                               )
+                                               .append(
+                                                       $( '<div>' )
+                                                               .addClass( 
'mw-rcfilters-ui-cell' )
+                                                               .addClass( 
'mw-rcfilters-ui-filterWrapperWidget-top-savedLinks' )
+                                                               .append( 
!mw.user.isAnon() ? savedLinksListWidget.$element : null )
+                                               )
+                               );
                        } // end Special:RC
 
                        if ( currentPage === 'Special:Watchlist' ) {
+                               $( [
+                                       '#contentSub', // line with username 
and edit watchlist links
+                                       '.watchlistDetails', // "10 pages on 
your watchlist..."
+                                       'form#mw-watchlist-resetbutton' // mark 
all as seen
+                               ].join( ',' ) ).detach();
+
+                               watchlistDetails =  mw.message(
+                                       'rcfilters-watchlist-details',
+                                       mw.config.get( 
'wgStructuredChangeFiltersWatchlistItemCount' )
+                               ).parse();
+
+                               editWatchlistButton = new 
mw.rcfilters.ui.EditWatchlistButtonWidget();
                                markSeenButton = new 
mw.rcfilters.ui.MarkSeenButtonWidget( controller, changesListModel );
-                               $( 'form#mw-watchlist-resetbutton' ).detach();
-                               filtersWidget.prependToTopRow( markSeenButton );
+
+                               filtersWidget.setTopRows( [
+                                       $( '<div>' )
+                                               .addClass( 
'mw-rcfilters-ui-row' )
+                                               .append(
+                                                       $( '<div>' )
+                                                               .addClass( 
'mw-rcfilters-ui-cell' )
+                                                               .addClass( 
'mw-rcfilters-ui-filterWrapperWidget-top-watchlistDetails' )
+                                                               .append( 
watchlistDetails )
+                                               )
+                                               .append(
+                                                       $( '<div>' )
+                                                               .addClass( 
'mw-rcfilters-ui-cell' )
+                                                               .addClass( 
'mw-rcfilters-ui-filterWrapperWidget-top-editWatchlistButton' )
+                                                               .append( 
editWatchlistButton.$element )
+                                               ),
+                                       $( '<div>' )
+                                               .addClass( 
'mw-rcfilters-ui-row' )
+                                               .addClass( 
'mw-rcfilters-ui-row-separator' ),
+                                       $( '<div>' )
+                                               .addClass( 
'mw-rcfilters-ui-row' )
+                                               .append(
+                                                       $( '<div>' )
+                                                               .addClass( 
'mw-rcfilters-ui-cell' )
+                                                               .append( 
markSeenButton.$element )
+                                               )
+                                               .append(
+                                                       $( '<div>' )
+                                                               .addClass( 
'mw-rcfilters-ui-cell' )
+                                                               .addClass( 
'mw-rcfilters-ui-filterWrapperWidget-top-savedLinks' )
+                                                               .append( 
!mw.user.isAnon() ? savedLinksListWidget.$element : null )
+                                               )
+                               ] );
                        } // end Special:WL
                }
        };
diff --git 
a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterWrapperWidget.less
 
b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterWrapperWidget.less
index a89b69c..4a8cfbf 100644
--- 
a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterWrapperWidget.less
+++ 
b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterWrapperWidget.less
@@ -12,9 +12,17 @@
                        width: 100%;
                }
 
-               &-savedLinks {
+               &-savedLinks,
+               &-editWatchlistButton {
+                       float: right;
                        padding-left: 1em;
-                       vertical-align: bottom;
+               }
+
+               .mw-rcfilters-ui-row-separator {
+                       width: 100%;
+                       border-top: solid grey 2px;
+                       margin: 0 10px;
+
                }
        }
 
diff --git 
a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListWidget.less
 
b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListWidget.less
index 716ed03..2b713e1 100644
--- 
a/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListWidget.less
+++ 
b/resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SavedLinksListWidget.less
@@ -1,6 +1,4 @@
 .mw-rcfilters-ui-savedLinksListWidget {
-       float: right;
-
        &-menu {
                width: 100%;
        }
diff --git 
a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.EditWatchlistButtonWidget.js
 
b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.EditWatchlistButtonWidget.js
new file mode 100644
index 0000000..7453593
--- /dev/null
+++ 
b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.EditWatchlistButtonWidget.js
@@ -0,0 +1,26 @@
+( function ( mw ) {
+       /**
+        * Button to go to Special:EditWatchlist
+        *
+        * @extends OO.ui.ButtonWidget
+        *
+        * @constructor
+        * @param {Object} [config] Configuration object
+        */
+       mw.rcfilters.ui.EditWatchlistButtonWidget = function 
MwRcfiltersUiEditWatchlistButtonWidget( config ) {
+               config = config || {};
+
+               // Parent
+               mw.rcfilters.ui.EditWatchlistButtonWidget.parent.call( this, 
$.extend( {
+                       label: mw.message( 
'rcfilters-watchlist-editWatchlist-button' ).text(),
+                       icon: 'edit',
+                       href: 'Special:EditWatchlist'
+               }, config ) );
+
+               this.$element.addClass( 
'mw-rcfilters-ui-editWatchlistButtonWidget' );
+       };
+
+       /* Initialization */
+
+       OO.inheritClass( mw.rcfilters.ui.EditWatchlistButtonWidget, 
OO.ui.ButtonWidget );
+}( mediaWiki ) );
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 b57f5d7..01f2f1c 100644
--- 
a/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js
+++ 
b/resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterWrapperWidget.js
@@ -59,17 +59,9 @@
                );
 
                // Initialize
-               this.$topRow = $( '<div>' )
-                       .addClass( 'mw-rcfilters-ui-row' )
-                       .append(
-                               $( '<div>' )
-                                       .addClass( 'mw-rcfilters-ui-cell' )
-                                       .addClass( 
'mw-rcfilters-ui-filterWrapperWidget-top-placeholder' )
-                       );
                $top = $( '<div>' )
                        .addClass( 'mw-rcfilters-ui-filterWrapperWidget-top' )
-                       .addClass( 'mw-rcfilters-ui-table' )
-                       .append( this.$topRow );
+                       .addClass( 'mw-rcfilters-ui-table' );
 
                $bottom = $( '<div>' )
                        .addClass( 'mw-rcfilters-ui-filterWrapperWidget-bottom' 
)
@@ -77,21 +69,6 @@
                                this.numChangesWidget.$element,
                                this.dateWidget.$element
                        );
-
-               if ( !mw.user.isAnon() ) {
-                       this.savedLinksListWidget = new 
mw.rcfilters.ui.SavedLinksListWidget(
-                               this.controller,
-                               this.queriesModel,
-                               { $overlay: this.$overlay }
-                       );
-
-                       this.$topRow.append(
-                               $( '<div>' )
-                                       .addClass( 'mw-rcfilters-ui-cell' )
-                                       .addClass( 
'mw-rcfilters-ui-filterWrapperWidget-top-savedLinks' )
-                                       .append( 
this.savedLinksListWidget.$element )
-                       );
-               }
 
                if ( mw.rcfilters.featureFlags.liveUpdate ) {
                        $bottom.append( this.liveUpdateButton.$element );
@@ -113,16 +90,13 @@
 
        /* Methods */
 
-       /**
-        * Add a widget at the beginning of the top row
-        *
-        * @param {OO.ui.Widget} widget Any widget
-        */
-       mw.rcfilters.ui.FilterWrapperWidget.prototype.prependToTopRow = 
function ( widget ) {
-               this.$topRow.prepend(
-                       widget.$element
-                               .addClass( 'mw-rcfilters-ui-cell' )
-               );
+       mw.rcfilters.ui.FilterWrapperWidget.prototype.setTopRows = function ( 
$topRows ) {
+               var $top = this.$element.find( 
'.mw-rcfilters-ui-filterWrapperWidget-top' );
+               if (!Array.isArray( $topRows )) {
+                       $topRows = [ $topRows ];
+               }
+               $topRows.forEach( function ( $row ) {
+                       $top.append( $row );
+               } );
        };
-
 }( mediaWiki ) );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ifcde40c66fbb6543d4f2aebfc8499c03533b8b91
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Sbisson <sbis...@wikimedia.org>

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

Reply via email to