MediaWiki:CentralNotice/Resources/BannerShowHideCount.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.
<script>
  /* MediaWiki:CentralNotice/Resources/BannerShowHideCount.js
   * Determine if a banner should be hidden or displayed based on the
   * contents of the cookie named `hide-cookie-name` and that + `-wait`.
   *
   * Provides CentralNotice alterImpressionData hook
   * Banner may be forced if URL parameter force = 1
   * Counters may be reset if URL parameter reset = 1
   */
  (function(mw) {
    var cookieCount = parseInt($.cookie('{{{hide-cookie-name}}}')) || 0,
        seenLimit = parseInt('{{{hide-cookie-max-count}}}') || 0,
        waitCount = parseInt($.cookie('{{{hide-cookie-name}}}-wait')) || 0,
        waitLimit = parseInt('{{{hide-cookie-wait-count}}}') || 0,
        hideBanner = true;

    if (window.location.search.match(/\breset=1/)) {
      // Reset counters on demand
      cookieCount = 0;
      waitCount = 0;
    }

    if (
      navigator.cookieEnabled &&
      (window.location.search.match(/\bforce=1/) || ((waitCount >= waitLimit) && (cookieCount < seenLimit)))
    ) {
      hideBanner = false;
      cookieCount += 1;
    } else {
      waitCount += 1;
    }

    // Finish up and store results
    $.cookie('{{{hide-cookie-name}}}', cookieCount, { expires: 365, path: '/' });
    $.cookie('{{{hide-cookie-name}}}-wait', waitCount, { expires: 365, path: '/' });
    mw.centralNotice.bannerData.hideResult = hideBanner;
    mw.centralNotice.bannerData.cookieCount = cookieCount;
  })(mediaWiki);

  mediaWiki.centralNotice.bannerData.alterImpressionData = function( impressionData ) {
    // 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.cookieCount) {
      impressionData.banner_count = mediaWiki.centralNotice.bannerData.cookieCount;
    }
    return !mediaWiki.centralNotice.bannerData.hideResult;
  };
</script>