Увага: Після публікування слід очистити кеш браузера, щоб побачити зміни.

  • Firefox / Safari: тримайте Shift, коли натискаєте Оновити, або натисніть Ctrl-F5 чи Ctrl-Shift-R (⌘-R на Apple Mac)
  • Google Chrome: натисніть Ctrl-Shift-R (⌘-Shift-R на Apple Mac)
  • Internet Explorer / Edge: тримайте Ctrl, коли натискаєте Оновити, або натисніть Ctrl-F5
  • Opera: натисніть Ctrl-F5
// Original version:
// - EditHysteria script by [[:pl:User:ChP94]]
// - Released under the [http://www.gnu.org/licenses/gpl.txt GNU Public License (GPL)]
// Modified by [[:pl:User:Beau]]
// Modified by [[:uk:User:AS]]

window.editHysteriaGadget = {
    version: 5,

    init: function() {
        if (mw.config.get( 'wgNamespaceNumber' ) < 0 || 
          mw.util.getParamValue('printable') === 'yes' ||
          mw.config.get('wgRevisionId') != mw.config.get('wgCurRevisionId')) {
            return;
        }

        var that = this;
        
        var api = new mw.Api();
        api.get({
            action:	'query',
            prop:	'revisions',
            rvprop:	'user|ids|userid|timestamp',
            titles:	mw.config.get('wgPageName'),
            rvlimit: 50,
        }).done(function(result) {
            jQuery(document).ready(function() {
                if (result) {
                    that.showResults(result);
                }
            });
        });
    },
    userlink: function(name) {
        var str = '<a href="' + mw.util.getUrl('User:' + name) + '">' + name + '</a> ' +
          '(<a href="' + mw.util.getUrl('Special:Contributions/' + name) + '">внесок</a>, <a href="' + mw.util.getUrl('User talk:' + name) + '">обговорення</a>';

        if ( jQuery.inArray( 'sysop', mw.config.get( 'wgUserGroups' ) ) != -1 ) {
            str += ', <a href="' + mw.util.getUrl('Special:Blockip/' + name) + '">заблокувати</a>';
        }

        str += ')';

        return str;
    },
    showResults: function(data) {
        var page = data.query.pages[ mw.config.get( 'wgArticleId' ) ];
        var firstHeading;
        var headers = document.getElementsByTagName( 'h1' );

        for ( var i = 0; i < headers.length; i++ ) {
            var header = headers[i];
            if(header.className == "firstHeading" || header.id == "firstHeading" || header.className == "pagetitle") {
                firstHeading = header; break;
            }
        }

        if( !firstHeading ) {
            firstHeading = document.getElementById("section-0");
        }

        if( !firstHeading ) {
            return;
        }

        var div = document.createElement("div");
        div.style.cssText = "font-size:0.5em;line-height:1em";
        div.className = 'plainlinks';
        if ( mw.config.get( 'skin' )  == 'modern' ) {
            div.style.marginLeft = "10px";
            div.style.display = "inline-block";
        }

        firstHeading.appendChild(div);

        var html = '';
        if (! page) {
            div.innerHTML = html + "Сторінки не існує.";
            div.style.color = "red";
            return;
        }

        var topuser = page.revisions[0].user;
        var topuserid = page.revisions[0].userid;
        var topTimeAgo = this.timeAgo(page.revisions[0].timestamp);
        var ldiff;
        var luser;
        var luserid;
        var ltimestamp;
        var count = 1;

        for (i = 1; i < page.revisions.length; i++) {
            ldiff = page.revisions[i].revid;
            luser = page.revisions[i].user;
            luserid = page.revisions[i].userid;
            ltimestamp = page.revisions[i].timestamp;
            if (luser != topuser)
                break;
            count++;
        }

        var toApplyGender = {};
        if (ldiff) {
            html += 'Востаннє <a href="'+ mw.util.getUrl( mw.config.get('wgPageName') ) + '?diff=cur&oldid=' + ldiff + '"/>редагована</a>' +
                ' <span class="edit-hysteria-by-user">користувачем</span> ' + this.userlink(topuser) + ' (' + count + '×, ' + topTimeAgo + ')';

            toApplyGender.byUser = topuserid;
            if(luser !== "" && luser != topuser) {
                var lTimeAgo = this.timeAgo(ltimestamp);
                html += '. Раніше <span class="edit-hysteria-edited-by">редагував</span> ' + this.userlink(luser) + ' (' + lTimeAgo + ')';
                toApplyGender.editedBy = luserid;
            }
            html += '.';
            div.innerHTML = html;
        }
        else if (topuser !== "") {
            div.innerHTML = html + 'Це єдина версія, створена <span class="edit-hysteria-by-user">користувачем</span> ' + this.userlink(topuser) + ' (' + topTimeAgo + ').';
        }
        
        if ( mw.config.get('skin') == 'modern' ) {
            var links = div.getElementsByTagName('a');
            for (i = 0; i < links.length; i++) {
                links[i].style.color = 'white';
                links[i].style.textDecoration = 'underline';
            }
        }
        
        this.applyGender(toApplyGender);
    },
    applyGender: function(toApplyGender){
        if(jQuery.isEmptyObject(toApplyGender)) return;

        var userids = toApplyGender.editedBy ? toApplyGender.byUser + '|' + toApplyGender.editedBy : toApplyGender.editedBy;
        var api = new mw.Api();
        api.get({
            action:	'query',
            list: 'users',
            ususerids: userids,
            usprop: 'gender',
        }).done(function(data) {
            if (data) {
                var users = data.query.users;
                var user;
                for (var i = 0; i < users.length; i++) {
                    user = users[i];
                    if (user.userid == toApplyGender.editedBy && user.gender === 'female'){
                        jQuery('.edit-hysteria-edited-by').text('редагувала');
                    }
                    else
                    if (user.userid == toApplyGender.byUser && user.gender === 'female'){
                        jQuery('.edit-hysteria-by-user').text('користувачкою');
                    }
                }
            }
        });
    },
    timeAgo: function(timestamp) {
        var date = new Date(timestamp);
       
        var seconds = Math.floor((new Date() - date) / 1000);
        
        var interval = seconds / 31536000;
        
        if (interval > 1) {
            return Math.floor(interval) + " р. тому";
        }
        interval = seconds / 2592000;
        if (interval > 1) {
            return Math.floor(interval) + " м. тому";
        }
        interval = seconds / 86400;
        if (interval > 1) {
            return Math.floor(interval) + " д. тому";
        }
        interval = seconds / 3600;
        if (interval > 1) {
            return Math.floor(interval) + " г. тому";
        }
        interval = seconds / 60;
        if (interval > 1) {
            return Math.floor(interval) + " хв. тому";
        }
        return Math.floor(seconds) + " сек. тому";
    }
};

editHysteriaGadget.init();