MediaWiki:CentralNotice/Resources/MinEditsMaxViewsFDC.js

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/* Determine if banner should be shown based on:
 *  A) if user has enough edits
 *  B) if user hasn't seen banners too many times
 *
 * Parameters (names should be self-explanatory)
 *  min-edits
 *  views-cookie-name
 *  max-views
 *
 * View counter cookie expires after being untouched for 60 days
 * which ought to be long enough for all non-fundraising campaigns
 *
 * Result is stored in mw.centralNotice.bannerData.hideResult as usual
 */

(function(mw) {

    var editCount = mw.config.get('wgUserEditCount');
    var minEdits  = parseInt('300');

    var viewCount = parseInt($.cookie('FDCElectionBanner')) || 0;
    var maxViews  = parseInt('5') || 0;

    var hideBanner = true;
    var hideReason = null;

    if ( mw.util.getParamValue('force') ) {
        hideBanner = false;
    } else if ( editCount < minEdits ) {
        hideBanner = true;
        hideReason = 'belowMinEdits';
    } else if ( viewCount >= maxViews ) {
        hideBanner = true;
        hideReason = 'viewLimit';
    } else {
        hideBanner = false;
        viewCount += 1;
        $.cookie('FDCElectionBanner', viewCount, { expires: 60, path: '/' });
    }

    // Store the results
    mw.centralNotice.bannerData.hideResult = hideBanner;
    mw.centralNotice.bannerData.hideReason = hideReason;
    mw.centralNotice.bannerData.viewCount  = viewCount;

})(mediaWiki);

mediaWiki.centralNotice.bannerData.alterImpressionData = function( impressionData ) {
    // Data for Special:RecordImpression
    // Returning true from this function indicates the banner was shown
    if (mediaWiki.centralNotice.bannerData.hideReason) {
        impressionData.reason = mediaWiki.centralNotice.bannerData.hideReason;
    }
    if (mediaWiki.centralNotice.bannerData.viewCount) {
        impressionData.banner_count = mediaWiki.centralNotice.bannerData.viewCount;
    }
    return !mediaWiki.centralNotice.bannerData.hideResult;
};