MediaWiki:InactiveUsers/code.js

From Redemption Wiki
Revision as of 15:27, 24 September 2018 by >HexUseMe (Created page with "/** * InactiveUsers * * documentation at: https://dev.wikia.com/wiki/InactiveUsers * © Peter Coester, 2012 * * continued as UserTags: https://dev.wikia.com/wiki/UserTa...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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.
/**
 * InactiveUsers
 *
 * documentation at: https://dev.wikia.com/wiki/InactiveUsers
 * © Peter Coester, 2012
 * 
 * continued as UserTags: https://dev.wikia.com/wiki/UserTags
 */
/*jshint curly:false laxbreak:true es5:true jquery:true */
 
(function (module, $, mw) {
    'use strict';
 
    if (!$('#UserProfileMasthead').exists() || window.InactiveUsersLoaded) {
        return;
    }
    window.InactiveUsersLoaded = true;
 
    // Polyfill for ECMAScript 5 function (so it works in older browsers)
    if (!Date.prototype.toISOString) Date.prototype.toISOString = function() {
        function pad(s) {
            return (s += '').length < 2 ? '0' + s : s;
        }
        return this.getUTCFullYear()
            + '-' + pad(this.getUTCMonth() + 1)
            + '-' + pad(this.getUTCDate())
            + 'T' + pad(this.getUTCHours())
            + ':' + pad(this.getUTCMinutes())
            + ':' + pad(this.getUTCSeconds())
            + '.' + (this.getUTCMilliseconds() / 1000).toFixed(3).substr(-3)
            + 'Z';
    };
 
    function isoDateNDaysAgo(days) {
        return new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();
    }
 
    function labelAsInactive() {
        var $container = $('#UserProfileMasthead hgroup'),
            css = $container.find('.tag').length ? {
                marginLeft: '10px'
            } : {};
        $container.append(
            $('<span>', {
                'class': 'tag inactive-user',
                'css': css,
                text: module.text
            })
        );
        mw.hook('dev.inactiveusers').fire();
    }
 
    module = $.extend({
        text: 'inactive',
        gone: [],
        months: 1
    }, module);
 
    var user = $('#UserProfileMasthead h1[itemprop="name"]').text();
 
    if (module.gone.indexOf(user) === -1) {
        mw.loader.using('mediawiki.api').then(function() {
            new mw.Api().get({
                action: 'query',
                list: 'usercontribs',
                uclimit: 1,
                ucprop: 'title|timestamp',
                ucuser: user,
                ucstart: isoDateNDaysAgo(0),
                ucend: isoDateNDaysAgo(30 * Math.max(parseInt(module.months, 10) || 1, 1))
            }).done(function(result) {
                if (
                    result &&
                    result.query &&
                    result.query.usercontribs &&
                    !result.query.usercontribs.length
                ) {
                    labelAsInactive();
                }
            });
        });
    } else {
        labelAsInactive();
    }
 
} (window.InactiveUsers = window.InactiveUsers || {}, jQuery, mediaWiki));