MediaWiki:CentralNotice/Resources/MinEditsMaxViews.js

From Meta, a Wikimedia project coordination wiki

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.loader.using(['mediawiki.util']).then(function() {

        var editCount = mw.config.get('wgUserEditCount');
        var minEdits  = parseInt('{{{min-edits}}}');

        var viewCount = parseInt($.cookie('{{{views-cookie-name}}}')) || 0;
        var maxViews  = parseInt('{{{max-views}}}') || 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('{{{views-cookie-name}}}', viewCount, { expires: 60, path: '/' });
        }

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

    });

});

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;
};