MediaWiki:Gadget-recentChanges.js: Difference between revisions

MediaWiki interface page
(Added attributes to fit better Citizen skin)
(Changed display property to allow more text to appear)
 
(11 intermediate revisions by the same user not shown)
Line 1: Line 1:
//<nowiki>
/**
/**
  * Adds a recent changes widget to the sidebar
  * Recent changes sidebar gadget for both Vector and Citizen skin
  *
  * Originally created by @author JaydenKieran from RunescapeWiki
* @author JaydenKieran
**/
*/
"use strict";
'use strict';
 


;
(function($, mw) {
(function($, mw) {
     var $prependTo
     var $prependTo;
     var $rcContainer
     var $rcContainer;
     var recentChanges
     var recentChanges;
     var $recentChangesDOM
     var $recentChangesDOM;
    var $final;
   
    var citizen = mw.config.get('skin') == 'citizen';
    var vector = mw.config.get('skin') == 'vector';


     function init() {
     function init() {
         $prependTo = $('#p-Navigation');
         $prependTo = $('#p-navigation');
         var api = new mw.Api();
         var api = new mw.Api();
 
       
         // Build our container
         //Adopting different structures for different skins
         var $rcLabelSpan = $('<span>').text('Recent changes')
         if (citizen) {
        .addClass('citizen-menu__heading-label');
        $final = $('<ul>').after($rcContainer);
        var $rcLabel = $('<label>')
.addClass('citizen-menu__heading')
  //    var $rcLabelSpan = $('<span>').text('Recent changes')
.attr('id', 'p-RecentChanges-label')
  //    .addClass('citizen-menu__heading-label');
.append($rcLabelSpan);
  //    var $rcLabel = $('<label>')
        $rcContainer = $('<nav>')
// .addClass('citizen-menu__heading')
.addClass('mw-portlet mw-portlet-RecentChanges')
// .attr('id', 'p-RecentChanges-label')
.attr('id', 'p-RecentChanges')
// .append($rcLabelSpan);
.append($rcLabel);
var $div = $('<div>').text('Recent changes')
        .addClass('citizen-menu__heading');
        $rcContainer = $('<nav>')
.addClass('citizen-menu mw-portlet mw-portlet-RecentChanges')
.attr('id', 'p-RecentChanges')
.append($div)
.append($final);
        } else if (vector) {
        $rcContainer = $('<nav>')
            .addClass('vector-menu vector-menu-portal portal')
            .attr('id', 'p-RecentChanges')
            .append(
                $('<label>').text('Recent changes')
                .addClass('vector-menu-heading')
                .attr('id', 'p-RecentChanges-label')
            )
        }


         // Add the container to the sidebar
         // Add the container to the sidebar
Line 80: Line 98:
Time = 1 + Math.floor(Math.random() * 10) + 'm ago – ';
Time = 1 + Math.floor(Math.random() * 10) + 'm ago – ';
}
}
 
if (citizen) {
                        return $('<div>').addClass('rc-sidebar-item').append(
var $a = $('<a>')
                            $('<a>')
                            .css('white-space', 'normal')
                            .css({
                            .addClass('rc-sidebar-page')
                            'white-space': 'normal'
                            .css({
                            })
                            'padding-top': '0.25em',
                            .addClass('rc-sidebar-page')
                            'padding-bottom': '0.25em'
                            .text(' ' + rc.title)
                            })
                            .attr('href', new mw.Title(rc.title).getUrl()),
                            .text(' ' + rc.title)
                            $('<p>')
                            .attr('href', new mw.Title(rc.title).getUrl());
                            .addClass('rc-sidebar-user')
                        var $p = $('<p>')
                            .text(Time)
                            .css({
                            .after(
                            'text-align': 'right',
                                $('<a>')
                            'margin-right': '2.5em'
                                .css({
                            })
                            'display' : '-webkit-inline-box',
                            .addClass('rc-sidebar-user')
                             'padding' : '0px'
                            .text(Time)
                                })
                            .append(
                                .text(rc.user)
                                $('<a>')
                                .attr('href', new mw.Title(rc.user, 2).getUrl())
                                .css({
                            'display' : 'contents',
                            'padding' : '0px'
                                })
                                .text(rc.user)
                                .attr('href', new mw.Title(rc.user, 2).getUrl())
                            );
                        return $('<li>').addClass('mw-list-item').append($a,$p);
                        } else if (vector) {
                        return $('<div>').addClass('rc-sidebar-item').append(
                            $('<a>')
                            .addClass('rc-sidebar-page')
                            .text(' ' + rc.title)
                            .attr('href', new mw.Title(rc.title).getUrl()),
                             $('<p>')
                            .addClass('rc-sidebar-user')
                            .text(Time)
                            .append(
                            $('<a>')
                                .text(rc.user)
                                .attr('href', new mw.Title(rc.user, 2).getUrl())
                            )
                             )
                             )
                         )
                         }
                     })
                     })
                 } else {
                 } else {
                     $recentChangesDOM = $('<p>').text('No recent changes.')
                     $recentChangesDOM = $('<p>').text('No recent changes.')
                 }
                 }
 
                if (vector) {
                 $rcContainer.append($recentChangesDOM)
                $final = $rcContainer;
                }
                 $final.append($recentChangesDOM)
                 var $showMore
                 var $showMore
$showMore = $('<div>')
$showMore = $('<div>')
Line 117: Line 158:
                 .attr('href', '/wiki/Special:RecentChanges')
                 .attr('href', '/wiki/Special:RecentChanges')
                 )
                 )
                 $rcContainer.append($showMore)
                 $final.append($showMore)
             })
             })
             .fail(function(_, data) {
             .fail(function(_, data) {
Line 128: Line 169:
     })
     })
}(jQuery, mediaWiki));
}(jQuery, mediaWiki));
//</nowiki>

Latest revision as of 15:39, 12 December 2023

/**
 *		Recent changes sidebar gadget for both Vector and Citizen skin
 *		Originally created by @author JaydenKieran from RunescapeWiki
**/
"use strict";


(function($, mw) {
    var $prependTo;
    var $rcContainer;
    var recentChanges;
    var $recentChangesDOM;
    var $final;
    
    var citizen = mw.config.get('skin') == 'citizen';
    var vector = mw.config.get('skin') == 'vector';

    function init() {
        $prependTo = $('#p-navigation');
        var api = new mw.Api();
        
        //Adopting different structures for different skins
        if (citizen) {
        	$final = $('<ul>').after($rcContainer);
	
	   //     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);
			var $div = $('<div>').text('Recent changes')
        		.addClass('citizen-menu__heading');
	        $rcContainer = $('<nav>')
				.addClass('citizen-menu mw-portlet mw-portlet-RecentChanges')
				.attr('id', 'p-RecentChanges')
				.append($div)
				.append($final);
        } else if (vector) {
        	$rcContainer = $('<nav>')
            .addClass('vector-menu vector-menu-portal portal')
            .attr('id', 'p-RecentChanges')
            .append(
                $('<label>').text('Recent changes')
                	.addClass('vector-menu-heading')
                	.attr('id', 'p-RecentChanges-label')
            )
        }

        // 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 – ';
						}
						if (citizen) {
							var $a = $('<a>')
	                            .css('white-space', 'normal')
	                            .addClass('rc-sidebar-page')
	                            .css({
	                            	'padding-top': '0.25em',
	                            	'padding-bottom': '0.25em'
	                            })
	                            .text(' ' + rc.title)
	                            .attr('href', new mw.Title(rc.title).getUrl());
	                        var $p = $('<p>')
	                            .css({
	                            	'text-align': 'right',
	                            	'margin-right': '2.5em'
	                            	})
	                            .addClass('rc-sidebar-user')
	                            .text(Time)
	                            .append(
	                                $('<a>')
	                                .css({
	                            	'display' : 'contents',
	                            	'padding' : '0px'
	                                })
	                                .text(rc.user)
	                                .attr('href', new mw.Title(rc.user, 2).getUrl())
	                            );
	                        return $('<li>').addClass('mw-list-item').append($a,$p);
                        } else if (vector) {
                        	return $('<div>').addClass('rc-sidebar-item').append(
                            	$('<a>')
                            		.addClass('rc-sidebar-page')
                            		.text(' ' + rc.title)
                            		.attr('href', new mw.Title(rc.title).getUrl()),
                            	$('<p>')
                            		.addClass('rc-sidebar-user')
                            		.text(Time)
                            		.append(
                            			$('<a>')
                                			.text(rc.user)
                                			.attr('href', new mw.Title(rc.user, 2).getUrl())
                            		)
                            )
                        }
                    })
                } else {
                    $recentChangesDOM = $('<p>').text('No recent changes.')
                }
                if (vector) {
                	$final = $rcContainer;
                }
                $final.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')
                )
                $final.append($showMore)
            })
            .fail(function(_, data) {
                alert(data.error.info)
            });
    }

    mw.loader.using(['mediawiki.util', 'mediawiki.api'], function() {
        $(init)
    })
}(jQuery, mediaWiki));