mediawiki-skins-MinervaNeue/resources/skins.minerva.scripts/ctaDrawers.js
Jdlrobson ca28efc9c7 Drop mw.mobileFrontend references
This restores the previously reverted patchset
If5b76245bf60bfa9cf977cdbf37ee0d6bb65f9d9

Changes since original:
* Added Depends-On to MobileFrontend
* Uses OOUI classes for page issues rather than es6 classes - ES6
classes do not support modifications to class prior to running
super so MobileFrontend's View class is not compatible without
significant refactors.

Depends-On: I24ad75adf8519102ca356d64d99d765ab69180cc
Bug: T348807
Change-Id: I4ff82af0251254c846f2caee330af5af738f6029
2023-11-10 01:30:52 +00:00

91 lines
3 KiB
JavaScript

// eslint-disable-next-line no-restricted-properties
var mobile = require( 'mobile.startup' ),
drawers = require( './drawers.js' ),
CtaDrawer = mobile.CtaDrawer;
/**
* Initialize red links call-to-action
*
* Upon clicking a red link, show an interstitial CTA explaining that the page doesn't exist
* with a button to create it, rather than directly navigate to the edit form.
*
* Special case T201339: following a red link to a user or user talk page should not prompt for
* its creation. The reasoning is that user pages should be created by their owners and it's far
* more common that non-owners follow a user's red linked user page to consider their
* contributions, account age, or other activity.
*
* For example, a user adds a section to a Talk page and signs their contribution (which creates
* a link to their user page whether exists or not). If the user page does not exist, that link
* will be red. In both cases, another user follows this link, not to edit create a page for
* that user but to obtain information on them.
*
* @ignore
* @param {jQuery} $redLinks
*/
function initRedlinksCta( $redLinks ) {
$redLinks.on( 'click', function ( ev ) {
var drawerOptions = {
progressiveButton: {
progressive: true,
label: mw.msg( 'mobile-frontend-editor-redlink-create' ),
href: $( this ).attr( 'href' )
},
actionAnchor: {
progressive: true,
label: mw.msg( 'mobile-frontend-editor-redlink-leave' ),
additionalClassNames: 'cancel'
},
onBeforeHide: drawers.discardDrawer,
content: mw.msg( 'mobile-frontend-editor-redlink-explain' )
},
drawer = CtaDrawer( drawerOptions );
// use preventDefault() and not return false to close other open
// drawers or anything else.
ev.preventDefault();
ev.stopPropagation();
drawers.displayDrawer( drawer, { hideOnScroll: true } );
} );
}
/**
* A CtaDrawer should show for anonymous users.
*
* @param {jQuery} $watchstar
*/
function initWatchstarCta( $watchstar ) {
var watchCtaDrawer;
// show a CTA for anonymous users
$watchstar.on( 'click', function ( ev ) {
if ( !watchCtaDrawer ) {
watchCtaDrawer = CtaDrawer( {
content: mw.msg( 'minerva-watchlist-cta' ),
queryParams: {
warning: 'mobile-frontend-watchlist-purpose',
campaign: 'mobile_watchPageActionCta',
returntoquery: 'article_action=watch'
},
onBeforeHide: drawers.discardDrawer,
signupQueryParams: {
warning: 'mobile-frontend-watchlist-signup-action'
}
} );
}
// If it's already shown dont display again
// (if user is clicking fast since we are reusing the drawer
// this might result in the drawer opening and closing)
if ( !watchCtaDrawer.$el[ 0 ].parentNode ) {
drawers.displayDrawer( watchCtaDrawer, { hideOnScroll: true } );
}
// prevent default to stop the user
// being navigated to Special:UserLogin
ev.preventDefault();
// Don't stopProgation, as we want WikimediaEvents to log clicks to this.
} );
}
module.exports = {
initWatchstarCta: initWatchstarCta,
initRedlinksCta: initRedlinksCta
};