Ejegg has uploaded a new change for review. https://gerrit.wikimedia.org/r/247460
Change subject: WIP Large banner limit mixin ...................................................................... WIP Large banner limit mixin In campaigns with this mixin enabled, a reader will see a large banner only once, then will only see small banners for a configurable period. Requires a 4-bucket campaign with large banners in A & B and small banners in C & D. Uses same cookie as on-wiki scripts for compatibility. Bug: T90919 Change-Id: Idac967fc2c4edb1d35350a2c9611c53c1d5a8d36 --- M CentralNotice.modules.php M CentralNotice.php M i18n/en.json M i18n/qqq.json A resources/subscribing/ext.centralNotice.largeBannerLimit.js 5 files changed, 82 insertions(+), 2 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/CentralNotice refs/changes/60/247460/1 diff --git a/CentralNotice.modules.php b/CentralNotice.modules.php index 0a6c530..56794bd 100644 --- a/CentralNotice.modules.php +++ b/CentralNotice.modules.php @@ -162,6 +162,10 @@ 'centralnotice-impression-diet-restart-cycle-delay-help', 'centralnotice-impression-diet-skip-initial', 'centralnotice-impression-diet-skip-initial-help', + + // Large banner limit + 'centralnotice-large-banner-limit-days', + 'centralnotice-large-banner-limit-days-help', ) ); @@ -254,6 +258,16 @@ 'targets' => array( 'desktop', 'mobile' ), ); +$wgResourceModules[ 'ext.centralNotice.largeBannerLimit' ] = array( + 'localBasePath' => $dir . '/resources', + 'remoteExtPath' => 'CentralNotice/resources', + 'scripts' => 'subscribing/ext.centralNotice.largeBannerLimit.js', + 'dependencies' => array( + 'ext.centralNotice.display', + ), + 'targets' => array( 'desktop', 'mobile' ), +); + $wgResourceModules[ 'ext.centralNotice.legacySupport' ] = array( 'localBasePath' => $dir . '/resources', 'remoteExtPath' => 'CentralNotice/resources', diff --git a/CentralNotice.php b/CentralNotice.php index d25a50c..a5f2169 100644 --- a/CentralNotice.php +++ b/CentralNotice.php @@ -322,6 +322,18 @@ ), ), ), + 'largeBannerLimit' => array( + 'module' => 'ext.centralNotice.largeBannerLimit', + 'nameMsg' => 'centralnotice-large-banner-limit', + 'helpMsg' => 'centralnotice-large-banner-limit-help', + 'parameters' => array( + 'days' => array( + 'type' => 'integer', + 'labelMsg' => 'centralnotice-large-banner-limit-days', + 'helpMsg' => 'centralnotice-large-banner-limit-days-help', + ), + ), + ), ); /* Setup */ diff --git a/i18n/en.json b/i18n/en.json index 618fcbb..eee1cde 100644 --- a/i18n/en.json +++ b/i18n/en.json @@ -283,5 +283,9 @@ "centralnotice-impression-diet-restart-cycle-delay": "How long to wait before restarting the cycle, in seconds (optional)", "centralnotice-impression-diet-restart-cycle-delay-help": "Defaults to 0, which means readers will experience a single cycle, and then we stop displaying banners.", "centralnotice-impression-diet-skip-initial": "Number of initial impressions to skip (optional)", - "centralnotice-impression-diet-skip-initial-help": "Defaults to 0, which will not skip any impressions. When the cycle begins, we will skip this many potential impressions before displaying a banner." + "centralnotice-impression-diet-skip-initial-help": "Defaults to 0, which will not skip any impressions. When the cycle begins, we will skip this many potential impressions before displaying a banner.", + "centralnotice-large-banner-limit": "Large banner limit and switch", + "centralnotice-large-banner-limit-help": "Show a large banner once, then switch to small banners. Place large banners in buckets A and B and small banners in buckets C and D.", + "centralnotice-large-banner-limit-days": "Length of suppression", + "centralnotice-large-banner-limit-days-help": "Number of days to suppress large banner display." } diff --git a/i18n/qqq.json b/i18n/qqq.json index 9e8ca18..93152c7 100644 --- a/i18n/qqq.json +++ b/i18n/qqq.json @@ -307,5 +307,9 @@ "centralnotice-impression-diet-restart-cycle-delay": "Label for the form control to set cycle restart delay", "centralnotice-impression-diet-restart-cycle-delay-help": "Help text for form control.", "centralnotice-impression-diet-skip-initial": "Label for the form control to skip initial impressions", - "centralnotice-impression-diet-skip-initial-help": "Help text for form control" + "centralnotice-impression-diet-skip-initial-help": "Help text for form control", + "centralnotice-large-banner-limit": "Label for the large banner limit mixin", + "centralnotice-large-banner-limit-help": "Help text for the large banner limit mixin", + "centralnotice-large-banner-limit-days": "Label for the form control to set large banner suppression length", + "centralnotice-large-banner-limit-days-help": "Help text for the form control to set large banner suppression length" } diff --git a/resources/subscribing/ext.centralNotice.largeBannerLimit.js b/resources/subscribing/ext.centralNotice.largeBannerLimit.js new file mode 100644 index 0000000..63a7ffc --- /dev/null +++ b/resources/subscribing/ext.centralNotice.largeBannerLimit.js @@ -0,0 +1,46 @@ +/** + * Large banner limit mixin. Shows readers a large banner once, then switches + * to small banners for a configurable number of days. + * + * Requires a campaign with four buckets. Buckets A and B are assumed to contain + * large banners, and buckets C and D small banners. + * + * Replaces the following scripts: + * https://meta.wikimedia.org/wiki/MediaWiki:FR2014/Resources/ShowHideCheckFullscreen.js + * https://meta.wikimedia.org/wiki/MediaWiki:FR2014/Resources/ChangeBucket-AtoC-BtoD.js + */ +( function ( $, mw ) { + 'use strict'; + + var cn = mw.centralNotice, + // See https://stackoverflow.com/questions/6125330/javascript-navigator-cookieenabled-browser-compatibility#15582757 + cookiesEnabled = ( 'cookie' in document + && ( document.cookie.length > 0 + || ( document.cookie = 'test' ).indexOf.call( document.cookie, 'test' ) > -1 + ) + ), + isTest = mw.util.getParamValue( 'force' ) || mw.util.getParamValue( 'banner' ), + mixin = new cn.Mixin( 'largeBannerLimit' ), + COOKIE_NAME = 'centralnotice-frbanner-seen-fullscreen'; + + mixin.setPreBannerHandler( function( mixinParams ) { + var currentBucket = cn.internal.bucketer.getBucket(), + newBucket, + isLarge = ( ( currentBucket !== null ) && ( currentBucket <= 1 ) ); + + if ( isTest || !isLarge ) { + return; + } + if ( !cookiesEnabled || $.cookie( COOKIE_NAME ) ) { + // Move reader immediately into small banner bucket + newBucket = currentBucket + 2; + cn.setBucket( newBucket ); + return; + } + // Cookies are enabled, and the reader has not yet seen a fullscreen banner + // Set a cookie to remember they saw a fullscreen + $.cookie( COOKIE_NAME, Date.now(), { expires: mixinParams.days } ); + } ); + // Register the mixin + cn.registerCampaignMixin( mixin ); +} )( jQuery, mediaWiki ); -- To view, visit https://gerrit.wikimedia.org/r/247460 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Idac967fc2c4edb1d35350a2c9611c53c1d5a8d36 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/CentralNotice Gerrit-Branch: master Gerrit-Owner: Ejegg <eeggles...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits