Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

MediaWiki:Gadget-recentChanges.js: Difference between revisions

MediaWiki interface page
More languages
(Added more styling for user-time text)
m (blanked page)
Tag: Blanking
Line 1: Line 1:
//<nowiki>
/**
* Adds a recent changes widget to the sidebar
*
* @author JaydenKieran
*/
'use strict';


;
(function($, mw) {
    var $prependTo
    var $rcContainer
    var recentChanges
    var $recentChangesDOM
    function init() {
        $prependTo = $('#p-Navigation');
        var api = new mw.Api();
        // Build our container
        var $rcLabelSpan = $('<span>').text('Recent changes')
        .addClass('citizen-menu__heading-label');
        var $rcLabel = $('<label>')
.addClass('citizen-menu__heading')
.attr('id', 'p-RecentChanges-label')
.append($rcLabelSpan);
        $rcContainer = $('<nav>')
.addClass('mw-portlet mw-portlet-RecentChanges')
.attr('id', 'p-RecentChanges')
.append($rcLabel);
        // Add the container to the sidebar
        $prependTo.after($rcContainer)
        api.get({
                action: "query",
                list: "recentchanges",
                rcprop: "title|timestamp|sizes|user",
                rcnamespace: "0|3000",
                rclimit: "5",
                rctype: "edit|new",
                rcshow: "!bot|!redirect",
                rctoponly: 1,
                format: "json"
            })
            .done(function(data) {
                if (data.query && data.query.recentchanges) {
                    recentChanges = data.query.recentchanges
                }
                if (recentChanges.length > 0) {
                    var Time = 1;
                    $recentChangesDOM = recentChanges.map(function(rc) {
                        const timeMatch = rc.timestamp.match(/([0-9]+)-([0-9]+)-([0-9]+)T([0-9]+):([0-9]+):([0-9]+)Z/);
                    var editYear = timeMatch[1];
                    var editMonth = timeMatch[2];
                    var editDay = timeMatch[3];
                    var editHour = timeMatch[4];
                    var editMinute = timeMatch[5];
                    var editSecond = timeMatch[6];
                   
                    var editDate = new Date(editYear, (editMonth-1), editDay, editHour, editMinute, editSecond);
var currentDate = new Date();
currentDate = currentDate.getTime() + (currentDate.getTimezoneOffset() * 60000)
var diffDate = currentDate - editDate;
var diffDays = Math.floor(diffDate/(1000*60*60*24));
var diffHours = Math.floor(diffDate/(1000*60*60));
var diffMinutes = Math.floor(diffDate/(1000*60));
var diffSeconds = Math.floor(diffDate/(1000));
if (diffDays > 0) {
Time = diffDays + 'd ago – ';
} else if (diffHours > 0) {
Time = diffHours + 'h ago – ';
} else if (diffMinutes > 0) {
Time = diffMinutes + 'm ago – ';
} else if (diffSeconds > 0) {
Time = diffSeconds + 's ago – ';
} else {
Time = 1 + Math.floor(Math.random() * 10) + 'm ago – ';
}
                        return $('<div>').addClass('rc-sidebar-item').append(
                            $('<a>')
                            .css('white-space', 'normal')
                            .addClass('rc-sidebar-page')
                            .text(' ' + rc.title)
                            .attr('href', new mw.Title(rc.title).getUrl()),
                            $('<p>')
                            .css({
                            'text-align': 'right',
                            'margin-right': '2.5em'
                            })
                            .addClass('rc-sidebar-user')
                            .text(Time)
                            .append(
                                $('<a>')
                                .css({
                            'display' : '-webkit-inline-box',
                            'padding' : '0px'
                                })
                                .text(rc.user)
                                .attr('href', new mw.Title(rc.user, 2).getUrl())
                            )
                        )
                    })
                } else {
                    $recentChangesDOM = $('<p>').text('No recent changes.')
                }
                $rcContainer.append($recentChangesDOM)
                var $showMore
$showMore = $('<div>')
                .addClass('rc-sidebar-item rc-sidebar-more')
                .append(
                $('<a>')
                .addClass('rc-sidebar-page')
                .text('See more...')
                .attr('href', '/wiki/Special:RecentChanges')
                )
                $rcContainer.append($showMore)
            })
            .fail(function(_, data) {
                alert(data.error.info)
            });
    }
    mw.loader.using(['mediawiki.util', 'mediawiki.api'], function() {
        $(init)
    })
}(jQuery, mediaWiki));
//</nowiki>

Revision as of 17:21, 8 March 2023