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

Reply via email to