jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/404683 )

Change subject: Restyle personal header
......................................................................


Restyle personal header

* Rearrange the code in ContentTranslationSpecialPage to unify
'userpage' tool into method other tools are using.
* Show missing pages in personal menu options with red color.
* Remove underline for personal menu options on hover.
* Small adjustments to personal header style:
- Reduce size of label next to the trademark to 20px.
- Reduce the size of menu handle and options.
- Increase separation between menu and notification icons.

Bug: T184842
Bug: T184571
Bug: T184719
Change-Id: I5f254d9324bf3e27047429b102eb20883be00827
---
M extension.json
M modules/ui/legacy/mw.cx.ui.Header.js
M modules/ui/legacy/styles/mw.cx.ui.Header.less
M modules/ui/legacy/styles/mw.cx.ui.ToolsColumn.less
A modules/ui/legacy/styles/mw.cx.ui.ToolsColumn.monobook.less
M modules/ui/mw.cx.ui.Header.js
M modules/ui/styles/mw.cx.ui.Header.less
M modules/ui/styles/mw.cx.ui.Header.monobook.less
M modules/ui/styles/mw.cx.ui.Header.vector.less
M modules/ui/styles/widgets/mw.cx.ui.PersonalMenuWidget.less
M modules/widgets/common/ext.cx.common.less
M specials/ContentTranslationSpecialPage.php
12 files changed, 112 insertions(+), 93 deletions(-)

Approvals:
  jenkins-bot: Verified
  Nikerabbit: Checked; Looks good to me, approved



diff --git a/extension.json b/extension.json
index 23a88c6..5d23d3b 100644
--- a/extension.json
+++ b/extension.json
@@ -1510,7 +1510,6 @@
                                "cx-save-draft-save-success",
                                "cx-save-draft-saving",
                                "cx-save-draft-tooltip",
-                               "cx-personaltools-user",
                                "cx-personaltools-anon",
                                "login"
                        ],
@@ -1539,7 +1538,6 @@
                                "cx-save-draft-save-success",
                                "cx-save-draft-saving",
                                "cx-save-draft-tooltip",
-                               "cx-personaltools-user",
                                "cx-personaltools-anon",
                                "login"
                        ],
@@ -1685,6 +1683,9 @@
                        "styles": [
                                "ui/legacy/styles/mw.cx.ui.ToolsColumn.less"
                        ],
+                       "skinStyles": {
+                               "monobook": [ 
"ui/legacy/styles/mw.cx.ui.ToolsColumn.monobook.less" ]
+                       },
                        "dependencies": [
                                "mw.cx.ui",
                                "mw.cx.ui.ProgressBarWidget"
diff --git a/modules/ui/legacy/mw.cx.ui.Header.js 
b/modules/ui/legacy/mw.cx.ui.Header.js
index d65e203..0e8b156 100644
--- a/modules/ui/legacy/mw.cx.ui.Header.js
+++ b/modules/ui/legacy/mw.cx.ui.Header.js
@@ -116,44 +116,36 @@
  * @return {array} menuItems Array of menu items
  */
 mw.cx.ui.Header.prototype.getPersonalMenuItems = function () {
-       var i, length, menuItem,
+       var index, menuItem,
                menuItems = [],
                personalMenuList = mw.config.get( 'personalMenuList' );
 
        if ( !this.isAnon ) {
-               menuItems.push( this.addUserMenuOption() );
+               menuItem = personalMenuList.user;
+               menuItems.push( this.createUserMenuOption( menuItem ) );
+               delete personalMenuList.user;
        }
 
-       for ( i = 0, length = personalMenuList.length; i < length; i++ ) {
-               menuItem = personalMenuList[ i ];
-
-               menuItems.push( new OO.ui.MenuOptionWidget( {
-                       label: menuItem.text,
-                       data: menuItem.href,
-                       accessKey: menuItem.accesskey,
-                       $element: $( '<a>' )
-                               .attr( {
-                                       href: menuItem.href,
-                                       title: menuItem.title
-                               } )
-               } ) );
+       for ( index in personalMenuList ) {
+               menuItem = personalMenuList[ index ];
+               menuItems.push( this.createUserMenuOption( menuItem ) );
        }
 
        return menuItems;
 };
 
-mw.cx.ui.Header.prototype.addUserMenuOption = function () {
-       var userPageData = mw.config.get( 'userPageData' ),
-               userLabel = mw.msg( 'cx-personaltools-user' );
+mw.cx.ui.Header.prototype.createUserMenuOption = function ( menuItem ) {
+       var classes = menuItem.notvisited ? [ 
'cx-header__personal-menu-option--missing' ] : [];
 
        return new OO.ui.MenuOptionWidget( {
-               label: userLabel,
-               data: userPageData.link,
-               accessKey: userPageData.accesskey,
+               label: menuItem.text,
+               data: menuItem.href,
+               classes: classes,
+               accessKey: menuItem.accesskey,
                $element: $( '<a>' )
                        .attr( {
-                               href: userPageData.link,
-                               title: userPageData.title
+                               href: menuItem.href,
+                               title: menuItem.title
                        } )
        } );
 };
diff --git a/modules/ui/legacy/styles/mw.cx.ui.Header.less 
b/modules/ui/legacy/styles/mw.cx.ui.Header.less
index dc55bce..7846c7e 100644
--- a/modules/ui/legacy/styles/mw.cx.ui.Header.less
+++ b/modules/ui/legacy/styles/mw.cx.ui.Header.less
@@ -80,7 +80,11 @@
 
        &-menu {
                width: auto;
-               margin: 0;
+               margin: 0 0 0 4px;
+
+               &-option--missing > .oo-ui-labelElement-label {
+                       color: @colorDestructive;
+               }
        }
 }
 
diff --git a/modules/ui/legacy/styles/mw.cx.ui.ToolsColumn.less 
b/modules/ui/legacy/styles/mw.cx.ui.ToolsColumn.less
index 0fcece6..6a97976 100644
--- a/modules/ui/legacy/styles/mw.cx.ui.ToolsColumn.less
+++ b/modules/ui/legacy/styles/mw.cx.ui.ToolsColumn.less
@@ -8,6 +8,11 @@
        min-height: 100vh;
        top: @personal-header-height + 2 * @personal-header-padding;
        border-left: 1px solid @colorGray12;
+       font-size: 14px;
+
+       > div {
+               font-size: medium;
+       }
 
        &.sticky {
                top: 0;
diff --git a/modules/ui/legacy/styles/mw.cx.ui.ToolsColumn.monobook.less 
b/modules/ui/legacy/styles/mw.cx.ui.ToolsColumn.monobook.less
new file mode 100644
index 0000000..eb95882
--- /dev/null
+++ b/modules/ui/legacy/styles/mw.cx.ui.ToolsColumn.monobook.less
@@ -0,0 +1,3 @@
+.cx-column--tools {
+       font-size: 12px;
+}
diff --git a/modules/ui/mw.cx.ui.Header.js b/modules/ui/mw.cx.ui.Header.js
index 2c13a54..132c01e 100644
--- a/modules/ui/mw.cx.ui.Header.js
+++ b/modules/ui/mw.cx.ui.Header.js
@@ -111,44 +111,36 @@
  * @return {array} menuItems Array of menu items
  */
 mw.cx.ui.Header.prototype.getPersonalMenuItems = function () {
-       var i, length, menuItem,
+       var index, menuItem,
                menuItems = [],
                personalMenuList = mw.config.get( 'personalMenuList' );
 
        if ( !this.isAnon ) {
-               menuItems.push( this.addUserMenuOption() );
+               menuItem = personalMenuList.user;
+               menuItems.push( this.createUserMenuOption( menuItem ) );
+               delete personalMenuList.user;
        }
 
-       for ( i = 0, length = personalMenuList.length; i < length; i++ ) {
-               menuItem = personalMenuList[ i ];
-
-               menuItems.push( new OO.ui.MenuOptionWidget( {
-                       label: menuItem.text,
-                       data: menuItem.href,
-                       accessKey: menuItem.accesskey,
-                       $element: $( '<a>' )
-                               .attr( {
-                                       href: menuItem.href,
-                                       title: menuItem.title
-                               } )
-               } ) );
+       for ( index in personalMenuList ) {
+               menuItem = personalMenuList[ index ];
+               menuItems.push( this.createUserMenuOption( menuItem ) );
        }
 
        return menuItems;
 };
 
-mw.cx.ui.Header.prototype.addUserMenuOption = function () {
-       var userPageData = mw.config.get( 'userPageData' ),
-               userLabel = mw.msg( 'cx-personaltools-user' );
+mw.cx.ui.Header.prototype.createUserMenuOption = function ( menuItem ) {
+       var classes = menuItem.notvisited ? [ 
'cx-header__personal-menu-option--missing' ] : [];
 
        return new OO.ui.MenuOptionWidget( {
-               label: userLabel,
-               data: userPageData.link,
-               accessKey: userPageData.accesskey,
+               label: menuItem.text,
+               data: menuItem.href,
+               classes: classes,
+               accessKey: menuItem.accesskey,
                $element: $( '<a>' )
                        .attr( {
-                               href: userPageData.link,
-                               title: userPageData.title
+                               href: menuItem.href,
+                               title: menuItem.title
                        } )
        } );
 };
diff --git a/modules/ui/styles/mw.cx.ui.Header.less 
b/modules/ui/styles/mw.cx.ui.Header.less
index 34f516d..20adc68 100644
--- a/modules/ui/styles/mw.cx.ui.Header.less
+++ b/modules/ui/styles/mw.cx.ui.Header.less
@@ -11,7 +11,7 @@
 }
 
 .cx-header:not( .cx-header--dashboard ) > .cx-header__main {
-       padding: 10px;
+       padding: @personal-header-padding;
 }
 
 .cx-header__trademark {
@@ -75,7 +75,11 @@
 
        &-menu {
                width: auto;
-               margin: 0;
+               margin: 0 0 0 4px;
+
+               &-option--missing > .oo-ui-labelElement-label {
+                       color: @colorDestructive;
+               }
        }
 }
 
@@ -101,7 +105,7 @@
 
 .cx-header__main,
 .cx-header__trademark {
-       min-height: 2.5em;
+       min-height: @personal-header-height;
 }
 
 .cx-header__main:after {
diff --git a/modules/ui/styles/mw.cx.ui.Header.monobook.less 
b/modules/ui/styles/mw.cx.ui.Header.monobook.less
index 7f2bb2c..311fc35 100644
--- a/modules/ui/styles/mw.cx.ui.Header.monobook.less
+++ b/modules/ui/styles/mw.cx.ui.Header.monobook.less
@@ -35,6 +35,19 @@
        }
 
        .cx-header__trademark-text {
-               font-size: 20px;
+               margin-left: 6px;
+               font-size: 18px;
+       }
+
+       .cx-header__main {
+               font-size: 12px;
+       }
+
+       .cx-header__personal {
+               font-size: 12.7px;
+
+               &-menu {
+                       font-size: 12px;
+               }
        }
 }
diff --git a/modules/ui/styles/mw.cx.ui.Header.vector.less 
b/modules/ui/styles/mw.cx.ui.Header.vector.less
index aeab13c..0131c64 100644
--- a/modules/ui/styles/mw.cx.ui.Header.vector.less
+++ b/modules/ui/styles/mw.cx.ui.Header.vector.less
@@ -11,7 +11,20 @@
 }
 
 .cx-header__trademark-text {
-       font-size: 24px;
+       margin-left: 8px;
+       font-size: 20px;
+}
+
+.cx-header__main {
+       font-size: 14px;
+}
+
+.cx-header__personal {
+       font-size: 16px;
+
+       &-menu {
+               font-size: 14px;
+       }
 }
 
 /* stylelint-disable selector-no-id */
diff --git a/modules/ui/styles/widgets/mw.cx.ui.PersonalMenuWidget.less 
b/modules/ui/styles/widgets/mw.cx.ui.PersonalMenuWidget.less
index 6ddcb31..f4fb5e8 100644
--- a/modules/ui/styles/widgets/mw.cx.ui.PersonalMenuWidget.less
+++ b/modules/ui/styles/widgets/mw.cx.ui.PersonalMenuWidget.less
@@ -6,6 +6,10 @@
                font-weight: bold;
        }
 
+       a.oo-ui-menuOptionWidget {
+               text-decoration: none;
+       }
+
        .oo-ui-dropdownWidget-handle > .oo-ui-labelElement-label {
                display: none;
 
diff --git a/modules/widgets/common/ext.cx.common.less 
b/modules/widgets/common/ext.cx.common.less
index 884d81c..daedce1 100644
--- a/modules/widgets/common/ext.cx.common.less
+++ b/modules/widgets/common/ext.cx.common.less
@@ -18,7 +18,7 @@
 
 @header-bar-height-legacy: 40px;
 @personal-header-height: 2.5em;
-@personal-header-padding: 0.625em;
+@personal-header-padding: 0.7em;
 
 .box-shadow-card() {
        .box-shadow( 0 1px 1px rgba( 0, 0, 0, 0.15 ) );
diff --git a/specials/ContentTranslationSpecialPage.php 
b/specials/ContentTranslationSpecialPage.php
index c97a891..0b5ad37 100644
--- a/specials/ContentTranslationSpecialPage.php
+++ b/specials/ContentTranslationSpecialPage.php
@@ -80,20 +80,7 @@
                // Get personal tools for the user
                $personalTools = $skin->getStructuredPersonalTools();
 
-               if ( $this->getUser()->isLoggedIn() ) {
-                       // Customized personal menu on Content Translation 
special pages uses current user's
-                       // username as dropdown menu label, and 'User' menu 
item for accessing User: page
-                       // We send only the link to User: page and the tooltip 
for the link
-                       $userPageData[ 'link' ] = $this->getToolLink( 
$personalTools, 'userpage' );
-                       $tipAndAccesskey = $this->getTooltipAndAccesskey( 
'pt-userpage' );
-                       $userPageData[ 'title' ] = $tipAndAccesskey[ 'title' ];
-                       $userPageData[ 'accesskey' ] = $tipAndAccesskey[ 
'accesskey' ];
-                       $out->addJsConfigVars( 'userPageData', $userPageData );
-
-                       // Remove userpage, because we have different ways of 
providing username and User page
-                       // link on customized Content translation special pages 
personal tools.
-                       unset( $personalTools[ 'userpage' ] );
-               } else {
+               if ( $this->getUser()->isAnon() ) {
                        // Reorder personal tools for anonymous user.
                        $personalTools = $this->reorderPersonalTools( 
$personalTools,
                                [ 'createaccount', 'login', 'anontalk', 
'anoncontribs' ]
@@ -172,28 +159,47 @@
                        // From the rest of the personal tools, we need flat 
structures of attributes
                        if ( isset( $item[ 'links' ] ) ) {
                                foreach ( $item[ 'links' ] as $linkKey => $link 
) {
+                                       $isMissing = false;
+
                                        $menuItem = [
                                                'text' => $link[ 'text' ],
                                                'href' => $link[ 'href' ]
                                        ];
 
+                                       // We want red links for missing pages 
in custom header on Content Translation
+                                       if ( isset( $link[ 'class' ] ) && 
$link[ 'class' ] === 'new' &&
+                                               isset( $link[ 'exists' ] ) && 
$link[ 'exists' ] === false
+                                       ) {
+                                               $isMissing = true;
+                                               $menuItem[ 'notvisited' ] = 
true;
+                                       }
+
                                        // single-id has the form of 'pt-uls', 
'pt-watchlist'...
                                        // This id is used to get the message 
as 'tooltip-$id'
                                        if ( $link[ 'single-id' ] ) {
                                                if ( isset( $link[ 
'tooltiponly' ] ) && $link[ 'tooltiponly' ] ) {
-                                                       $title = 
Linker::titleAttrib( $link[ 'single-id' ], null );
+                                                       $title = 
Linker::titleAttrib( $link[ 'single-id' ], [ 'nonexisting' ] );
                                                        if ( $title !== false ) 
{
                                                                $menuItem[ 
'title' ] = $title;
                                                        }
                                                } else {
                                                        $menuItem = array_merge(
                                                                $menuItem,
-                                                               
$this->getTooltipAndAccesskey( $link[ 'single-id' ] )
+                                                               
$this->getTooltipAndAccesskey( $link[ 'single-id' ], $isMissing )
                                                        );
                                                }
                                        }
 
-                                       $personalMenuItems[] = $menuItem;
+                                       // In Content Translation custom 
header, we want to treat User page menu option
+                                       // separatelly, as username is 
displayed in menu handle, and we use just display
+                                       // "User" as menu option for user's 
page.
+                                       if ( $key === 'userpage' ) {
+                                               $menuItem[ 'text' ] =
+                                                       wfMessage( 
"cx-personaltools-user" )->inContentLanguage()->text();
+                                               $personalMenuItems[ 'user' ] = 
$menuItem;
+                                       } else {
+                                               $personalMenuItems[] = 
$menuItem;
+                                       }
                                }
 
                                // We unset all tools except notification 
alerts and notices and ULS,
@@ -207,34 +213,16 @@
        }
 
        /**
-        * Get link for the specified personal tool ( e.g. Preferences )
-        *
-        * @param array $personalTools
-        * @param string $tool Name of the tool
-        * @return string|null Link to the tool or null
-        */
-       protected function getToolLink( array $personalTools, $tool ) {
-               $tools = $personalTools[ $tool ];
-
-               if ( isset( $tools[ 'links' ] ) ) {
-                       foreach ( $tools[ 'links' ] as $linkKey => $link ) {
-                               return $link[ 'href' ];
-                       }
-               }
-
-               return null;
-       }
-
-       /**
         * Get tooltip and access key for the specified personal tool ( e.g. 
Preferences )
         *
         * @param string $tool Name of the tool
+        * @param bool $isMissing True if tool page is missing
         * @return array Associative array of title and/or accesskey for the 
tool or empty array
         */
-       protected function getTooltipAndAccesskey( $tool ) {
+       protected function getTooltipAndAccesskey( $tool, $isMissing ) {
                $tipAndAccesskey = [];
 
-               $tip = Linker::tooltipAndAccesskeyAttribs( $tool );
+               $tip = Linker::tooltipAndAccesskeyAttribs( $tool, [], 
$isMissing ? 'nonexisting' : [] );
                if ( isset( $tip[ 'title' ] ) ) {
                        $tipAndAccesskey[ 'title' ] = $tip[ 'title' ];
                }

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I5f254d9324bf3e27047429b102eb20883be00827
Gerrit-PatchSet: 3
Gerrit-Project: mediawiki/extensions/ContentTranslation
Gerrit-Branch: master
Gerrit-Owner: Petar.petkovic <[email protected]>
Gerrit-Reviewer: Nikerabbit <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to