diff --git a/.storybook/icons.less b/.storybook/icons.less index dcd5da4..6ed274c 100644 --- a/.storybook/icons.less +++ b/.storybook/icons.less @@ -55,9 +55,16 @@ background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 20 20'%3E%3Ctitle%3Elog out%3C/title%3E%3Cpath d='M3 3h8V1H3a2 2 0 00-2 2v14a2 2 0 002 2h8v-2H3z'/%3E%3Cpath d='M13 5v4H5v2h8v4l6-5z'/%3E%3C/svg%3E"); } +.mw-ui-icon-wikimedia-userAvatar:before { + background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAx0lEQVQ4jdXSzQmEQAwFYEuYUixhSwgkA8mQgKXYgS3YgXZgCZagHWgHuxf14t8osssGcv145CVJvjk+hBRFK2TrkK1D0cqHkN7CUBRI7L21KAqXMIDModiwD9oAkLlH0i3L+ooGiTWPAPPfJQTIHLGOB9h46YZnKS+3PI8PISW2GkV7FO2Jrb79h4+ODyElsYJYm437NSRWRCWdylgj++U0u+UAZI5E22hsWW03UWQtr2NT66zlCjz8uzNQbFiDN7F5/xB8aj57Ynp2FKI0bAAAAABJRU5ErkJggg==") !important; +} + +.mw-ui-icon-wikimedia-ellipsis:before { + background-image: url("data:image/svg+xml,%3C%3Fxml version='1.0' encoding='UTF-8'%3F%3E%3Csvg xmlns='http://www.w3.org/2000/svg' width='20' height='20' viewBox='0 0 20 20'%3E%3Ctitle%3Eellipsis%3C/title%3E%3Ccircle cx='10' cy='10' r='2'/%3E%3Ccircle cx='3' cy='10' r='2'/%3E%3Ccircle cx='17' cy='10' r='2'/%3E%3C/svg%3E%0A") !important; +} + #pt-anonuserpage, -.vector-user-menu-legacy #pt-userpage a, -#p-new-personal-label { +#pt-userpage a { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAx0lEQVQ4jdXSzQmEQAwFYEuYUixhSwgkA8mQgKXYgS3YgXZgCZagHWgHuxf14t8osssGcv145CVJvjk+hBRFK2TrkK1D0cqHkN7CUBRI7L21KAqXMIDModiwD9oAkLlH0i3L+ooGiTWPAPPfJQTIHLGOB9h46YZnKS+3PI8PISW2GkV7FO2Jrb79h4+ODyElsYJYm437NSRWRCWdylgj++U0u+UAZI5E22hsWW03UWQtr2NT66zlCjz8uzNQbFiDN7F5/xB8aj57Ynp2FKI0bAAAAABJRU5ErkJggg==") !important; background-repeat: no-repeat; } diff --git a/bundlesize.config.json b/bundlesize.config.json index e0bfb0f..9ad987a 100644 --- a/bundlesize.config.json +++ b/bundlesize.config.json @@ -5,7 +5,7 @@ }, { "resourceModule": "skins.vector.styles", - "maxSize": "10 kB" + "maxSize": "11 kB" }, { "resourceModule": "skins.vector.legacy.js", @@ -14,5 +14,9 @@ { "resourceModule": "skins.vector.search", "maxSize": "3 kB" + }, + { + "resourceModule": "skins.vector.icons", + "maxSize": "500 B" } ] diff --git a/includes/SkinVector.php b/includes/SkinVector.php index 9336c26..d2f2d60 100644 --- a/includes/SkinVector.php +++ b/includes/SkinVector.php @@ -479,8 +479,13 @@ class SkinVector extends SkinMustache { if ( $portletData['id'] === 'p-personal' ) { if ( $this->shouldConsolidateUserLinks() ) { $portletData['class'] .= ' vector-user-menu'; - // Replace dropdown arrow with ellipsis icon if feature flag is enabled and user is logged in. + $portletData['class'] .= $this->loggedin ? + ' vector-user-menu-logged-in' : + ' vector-user-menu-logged-out'; $portletData['heading-class'] .= ' mw-ui-icon mw-ui-icon-element'; + $portletData['heading-class'] .= $this->loggedin ? + ' mw-ui-icon-wikimedia-userAvatar' : + ' mw-ui-icon-wikimedia-ellipsis'; } else { $portletData['class'] .= ' vector-user-menu-legacy'; } diff --git a/resources/common/components/UserLinks.less b/resources/common/components/UserLinks.less index eb58433..8140688 100644 --- a/resources/common/components/UserLinks.less +++ b/resources/common/components/UserLinks.less @@ -14,8 +14,7 @@ /* Icon for registered user names & anonymous message */ #pt-anonuserpage, -.vector-user-menu-legacy #pt-userpage a, -#p-personal-label { +.vector-user-menu-legacy #pt-userpage a { background-image: url( images/user-avatar.svg ); background-repeat: no-repeat; background-size: @background-size-nav-personal-icon @background-size-nav-personal-icon; diff --git a/resources/skins.vector.styles/components/UserLinks.less b/resources/skins.vector.styles/components/UserLinks.less index 33e09ba..e958f88 100644 --- a/resources/skins.vector.styles/components/UserLinks.less +++ b/resources/skins.vector.styles/components/UserLinks.less @@ -15,15 +15,7 @@ h3 { height: 100%; - min-width: 48px; - // Override background size from common/components/UserLinks.less - // stylelint-disable-next-line declaration-no-important - background-size: auto !important; - background-position: 25%; - - &:after { - background-position: 100% 0%; - } + padding: 0; } .vector-menu-checkbox { @@ -98,6 +90,32 @@ } } + .vector-user-menu-logged-out h3 { + &:before { + height: 100%; + } + + &:after { + content: none; + } + } + + .vector-user-menu-logged-in h3 { + min-width: 48px; + + &:before { + left: -25%; + top: 0; + bottom: 0; + background-size: auto; + color: #54595d; + } + + &:after { + background-position: 100% 0%; + } + } + .mw-portlet-notifications { li { float: left; diff --git a/skin.json b/skin.json index d3ce297..3255d62 100644 --- a/skin.json +++ b/skin.json @@ -147,6 +147,7 @@ "variants": [], "icons": [ "language", + "ellipsis", "userAvatar", "userTalk", "markup", diff --git a/stories/UserLinks.stories.data.js b/stories/UserLinks.stories.data.js index a1d2bfd..b318109 100644 --- a/stories/UserLinks.stories.data.js +++ b/stories/UserLinks.stories.data.js @@ -61,22 +61,21 @@ const PERSONAL_MENU_TEMPLATE_DATA = { loggedInWithULS }; -const additionalMenuData = { - class: 'vector-user-menu vector-menu-dropdown', - 'is-dropdown': true, - 'heading-class': 'mw-ui-icon mw-ui-icon-element' -}; - const loggedInData = { - 'is-anon': true, + class: 'vector-user-menu vector-menu-dropdown vector-user-menu-logged-in', + 'heading-class': 'mw-ui-icon mw-ui-icon-element mw-ui-icon-wikimedia-userAvatar', + 'is-anon': false, 'html-after-portal': `
Log out
- ` + `, + 'is-dropdown': true }; const loggedOutData = { + class: 'vector-user-menu vector-menu-dropdown vector-user-menu-logged-out', + 'heading-class': 'mw-ui-icon mw-ui-icon-element mw-ui-icon-wikimedia-ellipsis', 'is-anon': true, 'html-before-portal': `
@@ -87,7 +86,8 @@ const loggedOutData = { Pages for logged out editors (learn more):

- ` + `, + 'is-dropdown': true }; /** @@ -97,7 +97,7 @@ const USER_LINKS_LOGGED_IN_TEMPLATE_DATA = { 'is-anon': false, 'data-user-page': helperMakeMenuData( 'user-page', USERNAME_ITEM ), 'data-notifications': helperMakeMenuData( 'notifications', ECHO_ITEMS ), - 'data-user-menu': helperMakeMenuData( 'new-personal', USER_LINKS_ITEMS, Object.assign( {}, additionalMenuData, loggedInData ) ) + 'data-user-menu': helperMakeMenuData( 'new-personal', USER_LINKS_ITEMS, loggedInData ) }; /** @@ -106,7 +106,7 @@ const USER_LINKS_LOGGED_IN_TEMPLATE_DATA = { const USER_LINKS_LOGGED_OUT_TEMPLATE_DATA = { 'is-anon': true, 'html-create-account': `Create account`, - 'data-user-menu': helperMakeMenuData( 'new-personal', ANON_USER_LINKS_ITEMS, Object.assign( {}, additionalMenuData, loggedOutData ) ) + 'data-user-menu': helperMakeMenuData( 'new-personal', ANON_USER_LINKS_ITEMS, loggedOutData ) }; export {