MediaWiki:CentralNotice/Resources/MaxViews.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 hasn't seen banners too many times
 *
 * Parameters (names should be self-explanatory)
 *  views-cookie-name
 *  max-views
 *
 * View counter cookie expires after being untouched for 365 days
 *
 * Result is stored in mw.centralNotice.bannerData.hideResult as usual
 */

mw.loader.using(['mediawiki.util']).then(function() {

    var viewCount = parseInt($.cookie('{{{views-cookie-name}}}')) || 0;
    var maxViews  = parseInt('{{{max-views}}}') || 10000;

    var hideBanner = true;
    var hideReason = null;

    if ( mw.util.getParamValue('force') ) {
        hideBanner = false;
    } else if ( viewCount >= maxViews ) {
        hideBanner = true;
        hideReason = 'viewLimit';
    } else {
        hideBanner = false;
        viewCount += 1;
        $.cookie('{{{views-cookie-name}}}', viewCount, { expires: 365, 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;
};