jenkins-bot has submitted this change and it was merged. Change subject: Quick popover menu when hovering the contributions link ......................................................................
Quick popover menu when hovering the contributions link Communicate that users can create new contributions (especially translations) in a quick way. When users hover the contributions link, show a popover with access to different contribution areas: - "User contributions" links to the contributions page - "Uploaded media" links to "My Uploads" from Commons. - "Translations" links to the Content Translation Dashboard The popover menu will be shown open initially right after the user enabled the content translation beta feature (to help announce where to translate from). This will be auto-open exactly once. Bug: T92938 Change-Id: I47ec9d602c1af918b26522f35d716f98ea3fe432 --- M ContentTranslation.hooks.php M ContentTranslation.php M Resources.php M i18n/en.json M i18n/qqq.json A modules/campaigns/ext.cx.betafeature.init.js A modules/campaigns/ext.cx.campaigns.contributionsmenu.js A modules/campaigns/images/blue-beta.png A modules/campaigns/images/blue-beta.svg R modules/campaigns/images/cx-announcement-icon.gif A modules/campaigns/images/translation.png A modules/campaigns/images/translation.svg A modules/campaigns/images/userAvatar.png A modules/campaigns/images/userAvatar.svg A modules/campaigns/images/wikimediaCommons.png A modules/campaigns/images/wikimediaCommons.svg A modules/campaigns/styles/ext.cx.campaigns.contributionsmenu.less M modules/campaigns/styles/ext.cx.campaigns.newarticle.less 18 files changed, 216 insertions(+), 1 deletion(-) Approvals: Nikerabbit: Looks good to me, approved jenkins-bot: Verified diff --git a/ContentTranslation.hooks.php b/ContentTranslation.hooks.php index ac18b64..6563f41 100644 --- a/ContentTranslation.hooks.php +++ b/ContentTranslation.hooks.php @@ -63,6 +63,9 @@ $out->addModules( 'ext.cx.redlink' ); } + // Add a hover menu for contributions link in personal tool bar + $out->addModules( 'ext.cx.campaigns.contributionsmenu' ); + // The current guided tours are only for the user namespace, // so load the module only there. // In the future there may be guided tours in other namespaces, @@ -190,6 +193,28 @@ } /** + * Hook: User::UserSaveOptions + */ + public static function onSaveOptions( $user, &$saveOptions ) { + $out = RequestContext::getMain()->getOutput(); + + if ( + $saveOptions['cx'] && + !isset( $saveOptions['cx-know'] ) && + !$out->getTitle()->isSpecial( 'ContentTranslation' ) + ) { + $out->addModules( + array( 'ext.cx.betafeature.init', 'ext.cx.campaigns.contributionsmenu' ) + ); + // This make sure the auto-open contribution menu shown exactly once. + // and it is not in Special:CX + $saveOptions['cx-know'] = true; + } + + return true; + } + + /** * Hook: ResourceLoaderTestModules */ public static function onResourceLoaderTestModules( array &$modules ) { diff --git a/ContentTranslation.php b/ContentTranslation.php index 72644ae..c39e77d 100644 --- a/ContentTranslation.php +++ b/ContentTranslation.php @@ -71,6 +71,7 @@ 'ContentTranslationHooks::addNewContributionButton'; $GLOBALS['wgHooks']['ListDefinedTags'][] = 'ContentTranslationHooks::registerTags'; $GLOBALS['wgHooks']['ChangeTagsListActive'][] = 'ContentTranslationHooks::registerTags'; +$GLOBALS['wgHooks']['UserSaveOptions'][] = 'ContentTranslationHooks::onSaveOptions'; $GLOBALS['wgHooks']['EditPage::showEditForm:initial'][] = 'ContentTranslationHooks::newArticleCampign'; $GLOBALS['wgHooks']['ResourceLoaderTestModules'][] = diff --git a/Resources.php b/Resources.php index 1e1e0d9..61b2af2 100644 --- a/Resources.php +++ b/Resources.php @@ -729,6 +729,32 @@ ) ) + $resourcePaths; +$wgResourceModules['ext.cx.betafeature.init'] = array( + 'scripts' => array( + 'campaigns/ext.cx.betafeature.init.js', + ), +) + $resourcePaths; + +$wgResourceModules['ext.cx.campaigns.contributionsmenu'] = array( + 'scripts' => array( + 'campaigns/ext.cx.campaigns.contributionsmenu.js', + ), + 'styles' => array( + 'campaigns/styles/ext.cx.campaigns.contributionsmenu.less', + ), + 'dependencies' => array( + 'mediawiki.ui.button', + 'jquery.client', + 'mediawiki.util', + 'ext.cx.widgets.callout', + ), + 'messages' => array( + 'cx-campaign-contributionsmenu-mycontributions', + 'cx-campaign-contributionsmenu-mytranslations', + 'cx-campaign-contributionsmenu-myuploads', + ) +) + $resourcePaths; + $wgResourceModules['ext.cx.widgets.overlay'] = array( 'scripts' => array( 'widgets/overlay/ext.cx.overlay.js', diff --git a/i18n/en.json b/i18n/en.json index b0206d9..c4ac923 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -169,6 +169,9 @@ "cx-campaign-newarticle-notice": "Now you can also create new content by <b>translating</b>! Do you want to try the Content Translation beta tool?", "cx-campaign-no-thanks": "No, thanks", "cx-campaign-try": "Try Content Translation", + "cx-campaign-contributionsmenu-mycontributions": "Contributions", + "cx-campaign-contributionsmenu-mytranslations": "Translations", + "cx-campaign-contributionsmenu-myuploads": "Uploaded media", "cx-trend-all-translations": "All translations", "cx-trend-translations-to": "Translations to $1 language" } diff --git a/i18n/qqq.json b/i18n/qqq.json index 1e5e64c..2c9ce2d 100644 --- a/i18n/qqq.json +++ b/i18n/qqq.json @@ -173,6 +173,9 @@ "cx-campaign-newarticle-notice": "Text shown in the dialog inviting editors to try the Content Translation beta feature", "cx-campaign-no-thanks": "Button label to cancel Content Translation invite\n{{Identical|No thanks}}", "cx-campaign-try": "Button label to try Content Translation beta feature", + "cx-campaign-contributionsmenu-myuploads": "Menu item for menu shown while hovering the contributions link in personal toolbar. Points to the Special:MyUploads in commons", + "cx-campaign-contributionsmenu-mycontributions": "Menu item for menu shown while hovering the contributions link in personal toolbar. Points to [[Special:MyContributions]]", + "cx-campaign-contributionsmenu-mytranslations": "Menu item for menu shown while hovering the contributions link in personal toolbar. Points to the Content Translation dashboard", "cx-trend-all-translations": "Label shown in the legend section Content translation trends(graph visualization)", "cx-trend-translations-to": "Label shown in the legend section Content translation trends(graph visualization)\n$1 - language name" } diff --git a/modules/campaigns/ext.cx.betafeature.init.js b/modules/campaigns/ext.cx.betafeature.init.js new file mode 100644 index 0000000..c898571 --- /dev/null +++ b/modules/campaigns/ext.cx.betafeature.init.js @@ -0,0 +1,8 @@ +( function ( $, mw ) { + 'use strict'; + + // This module get loaded when CX beta feature is enabled. + $( function () { + mw.hook( 'mw.cx.betafeature.enabled' ).fire(); + } ); +}( jQuery, mediaWiki ) ); diff --git a/modules/campaigns/ext.cx.campaigns.contributionsmenu.js b/modules/campaigns/ext.cx.campaigns.contributionsmenu.js new file mode 100644 index 0000000..4a0d189 --- /dev/null +++ b/modules/campaigns/ext.cx.campaigns.contributionsmenu.js @@ -0,0 +1,81 @@ +/** + * Content Translation invitation from the 'contributions' link in pages. + * + * @file + * @copyright See AUTHORS.txt + * @license GPL-2.0+ + */ +( function ( $, mw ) { + 'use strict'; + + var campaign = 'contributionsmenu'; + + function showInvitation() { + var callout, $menu, $trigger, cxLink, $myContributions, $myTranslations, $myUploads; + + $trigger = $( '#pt-mycontris a' ); + cxLink = mw.util.getUrl( 'Special:ContentTranslation', { + campaign: campaign, + to: mw.config.get( 'wgContentLanguage' ) + } ); + + $myContributions = $( '<li>' ) + .addClass( 'cx-campaign-contributions' ) + .append( + $( '<a>' ) + .text( mw.msg( 'cx-campaign-contributionsmenu-mycontributions' ) ) + .attr( 'href', $trigger.attr( 'href' ) ) + ); + $myTranslations = $( '<li>' ) + .addClass( 'cx-campaign-translations' ) + .append( + $( '<a>' ) + .text( mw.msg( 'cx-campaign-contributionsmenu-mytranslations' ) ) + .attr( 'href', cxLink ) + ); + if ( $( '.mw-special-Preferences' ).length ) { + $myTranslations.addClass( 'cx-campaign-new-beta-feature' ); + } + $myUploads = $( '<li>' ) + .addClass( 'cx-campaign-uploads' ) + .append( + $( '<a>' ) + .text( mw.msg( 'cx-campaign-contributionsmenu-myuploads' ) ) + .attr( 'href', '//commons.wikimedia.org/wiki/Special:MyUploads' ) + ); + $menu = $( '<ul>' ) + .append( $myContributions, $myTranslations, $myUploads ); + $trigger.callout( { + trigger: 'manual', + classes: 'cx-campaign-contributionsmenu', + gravity: $.fn.callout.autoNEW, + content: $menu + } ); + + callout = $trigger.data( 'callout' ); + + function show() { + callout.show(); + callout.$dialog.on( 'mouseleave', function () { + callout.hide(); + } ); + // Not measuring the shown menu events since there will be a lot-since the + // trigger is 'hover'. But can be easily track if somebody use it to + // reach CX + } + $trigger.on( 'mouseover', show ); + mw.hook( 'mw.cx.betafeature.enabled' ).add( function () { + // Show after a few milliseconds to get all position calculation correct + setTimeout( show, 500 ); + mw.hook( 'mw.cx.cta.shown' ).fire( campaign ); + } ); + } + + $( function () { + var blacklist = mw.config.get( 'wgContentTranslationBrowserBlacklist' ); + if ( !$.client.test( blacklist, null, true ) ) { + showInvitation(); + } + } ); + +}( jQuery, mediaWiki ) ); diff --git a/modules/campaigns/images/blue-beta.png b/modules/campaigns/images/blue-beta.png new file mode 100644 index 0000000..4338638 --- /dev/null +++ b/modules/campaigns/images/blue-beta.png Binary files differ diff --git a/modules/campaigns/images/blue-beta.svg b/modules/campaigns/images/blue-beta.svg new file mode 100644 index 0000000..86a5790 --- /dev/null +++ b/modules/campaigns/images/blue-beta.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" ?> +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 612 792" enable-background="new 0 0 612 792"> + <path fill="#3F9EFF" d="M306 192c-112.2 0-204 91.8-204 204s91.8 204 204 204 204-91.8 204-204-91.8-204-204-204zm102 306l-76.5-51-25.5 102-25.5-102-76.5 51 51-76.5-102-25.5 102-25.5-51-76.5 76.5 51 25.5-102 25.5 102 76.5-51-51 76.5 102 25.5-102 25.5 51 76.5z" /> +</svg> diff --git a/modules/campaigns/styles/images/cx-announcement-icon.gif b/modules/campaigns/images/cx-announcement-icon.gif similarity index 100% rename from modules/campaigns/styles/images/cx-announcement-icon.gif rename to modules/campaigns/images/cx-announcement-icon.gif Binary files differ diff --git a/modules/campaigns/images/translation.png b/modules/campaigns/images/translation.png new file mode 100644 index 0000000..c6a7642 --- /dev/null +++ b/modules/campaigns/images/translation.png Binary files differ diff --git a/modules/campaigns/images/translation.svg b/modules/campaigns/images/translation.svg new file mode 100644 index 0000000..c660fbd --- /dev/null +++ b/modules/campaigns/images/translation.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" ?> +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"> + <path d="M11.1 13.1c-1.8-2.1-2.7-4.3-3-5.1h4.7l.7-2h-5.5v-3h-2v3h-5v2h5c-.2.9-1.3 4.8-5.1 7.6l1.2 1.6c2.7-2 4.3-4.5 5.1-6.4.7 1.3 1.7 3 3.2 4.5l.7-2.2zM12.5 20l1.3-4h5.3l1.3 4h2.2l-4.6-14h-3l-4.7 14h2.2zm4-12l2 6h-4l2-6z" /> +</svg> diff --git a/modules/campaigns/images/userAvatar.png b/modules/campaigns/images/userAvatar.png new file mode 100644 index 0000000..bcbdd2c --- /dev/null +++ b/modules/campaigns/images/userAvatar.png Binary files differ diff --git a/modules/campaigns/images/userAvatar.svg b/modules/campaigns/images/userAvatar.svg new file mode 100644 index 0000000..123601e --- /dev/null +++ b/modules/campaigns/images/userAvatar.svg @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8" ?> +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"> + <path d="M19.5 18.5c-1.2-.4-4-1.5-4-1.5-.9-.3-.9-1.1-1-2v-.1c1.4-1.2 2.5-3.2 2.5-5.4 0-4.7-2-6.5-5-6.5-2.1 0-5 1.2-5 6.5 0 2.1 1.1 4.1 2.5 5.4v.1c0 .9-.1 1.7-1 2 0 0-2.9 1.1-4 1.5-1.3.4-2.5 1-2.5 2.5v1h20v-1c0-1.2-.8-2-2.5-2.5z" /> +</svg> diff --git a/modules/campaigns/images/wikimediaCommons.png b/modules/campaigns/images/wikimediaCommons.png new file mode 100644 index 0000000..40f500c --- /dev/null +++ b/modules/campaigns/images/wikimediaCommons.png Binary files differ diff --git a/modules/campaigns/images/wikimediaCommons.svg b/modules/campaigns/images/wikimediaCommons.svg new file mode 100644 index 0000000..fd50836 --- /dev/null +++ b/modules/campaigns/images/wikimediaCommons.svg @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="utf-8" ?> +<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" enable-background="new 0 0 24 24"> + <path d="M15.4 7.8c-2-.9-2.3-2.5-2.4-2.8.1.1 2 1 2 1l-3-5-3 5 2-1s0 .8.6 2.1c.8 1.5 2.2 2.2 2.2 2.2s1.6.7 2.2 1.3l-.7.7-.5-.5-.4 1.8 1.8-.4-.5-.5.7-.7c.9 1 1.5 2.3 1.6 3.8h-1v-.8l-1.5 1 1.5 1v-.8h1c-.1 1.5-.6 2.8-1.6 3.8l-.7-.7.5-.5-1.8-.4.4 1.8.5-.5.7.7c-1 .9-2.3 1.5-3.8 1.6v-1h.8l-1-1.5-1 1.5h.8v1c-1.5-.1-2.8-.6-3.8-1.6l.7-.7.5.5.4-1.8-1.8.4.5.5-.7.7c-.9-1-1.5-2.3-1.6-3.8h1v.8l1.5-1-1.5-1v.8h-1c.1-1.5.6-2.8 1.6-3.8l.7.7-.5.5 1.8.4-.4-1.8-.5.5-.7-.7-1.5-1.4c-1.5 1.4-2.5 3.5-2.5 5.8 0 4.4 3.6 8 8 8s8-3.6 8-8c0-3.2-1.9-5.9-4.6-7.2z" /> + <circle cx="12" cy="15" r="3" /> +</svg> diff --git a/modules/campaigns/styles/ext.cx.campaigns.contributionsmenu.less b/modules/campaigns/styles/ext.cx.campaigns.contributionsmenu.less new file mode 100644 index 0000000..a1a8a2b --- /dev/null +++ b/modules/campaigns/styles/ext.cx.campaigns.contributionsmenu.less @@ -0,0 +1,51 @@ +@import "mediawiki.mixins"; + +.cx-campaign-contributionsmenu { + padding: 0; + + ul { + padding: 0; + margin: 0; + } + + li { + list-style: none; + padding: 0; + margin: 0; + border-bottom: 1px solid #ccc; + min-width: 250px; + background-size: 24px; + background-position: 10px center; + background-repeat: no-repeat; + + a { + text-decoration: none; + color: #565656; + padding: 5px 10px 5px 40px; + display: block; + } + + &:hover { + background-color: #eee; + } + + &.cx-campaign-contributions { + .background-image-svg('../images/userAvatar.svg', '../images/userAvatar.png'); + } + + &.cx-campaign-uploads { + .background-image-svg('../images/wikimediaCommons.svg', '../images/wikimediaCommons.png'); + } + + &.cx-campaign-translations { + .background-image-svg('../images/translation.svg', '../images/translation.png'); + } + + &.cx-campaign-new-beta-feature a { + .background-image-svg('../images/blue-beta.svg', '../images/blue-beta.png'); + background-position: right center; + background-repeat: no-repeat; + background-size: 24px; + } + } +} diff --git a/modules/campaigns/styles/ext.cx.campaigns.newarticle.less b/modules/campaigns/styles/ext.cx.campaigns.newarticle.less index 0c26694..ee7628c 100644 --- a/modules/campaigns/styles/ext.cx.campaigns.newarticle.less +++ b/modules/campaigns/styles/ext.cx.campaigns.newarticle.less @@ -6,7 +6,7 @@ font-size: 16px; &__logo { - .background-image('images/cx-announcement-icon.gif'); + .background-image('../images/cx-announcement-icon.gif'); background-position: top center; background-repeat: no-repeat; height: 100px; -- To view, visit https://gerrit.wikimedia.org/r/200842 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: I47ec9d602c1af918b26522f35d716f98ea3fe432 Gerrit-PatchSet: 10 Gerrit-Project: mediawiki/extensions/ContentTranslation Gerrit-Branch: master Gerrit-Owner: Santhosh <santhosh.thottin...@gmail.com> Gerrit-Reviewer: Amire80 <amir.ahar...@mail.huji.ac.il> Gerrit-Reviewer: Nikerabbit <niklas.laxst...@gmail.com> Gerrit-Reviewer: Pginer <pgi...@wikimedia.org> Gerrit-Reviewer: Santhosh <santhosh.thottin...@gmail.com> Gerrit-Reviewer: Siebrand <siebr...@kitano.nl> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits