MediaWiki:Gadget-rcwidget.js/Archive

From Tardis Wiki, the free Doctor Who reference
Clear your cache often around here

After changes are made to this site's CSS or Javascript, you have to bypass your browser's cache to see the changes. You can always do this by going to your browser's preferences panel. But many browsers also offer keyboard shortcuts to save you that trouble. The following shortcuts work in the versions of the browsers that Tardis currently supports. They may not work in earlier versions.

  • Firefox: hold down Shift while performing a page reload.
  • Opera offers no default keyboard shortcut, but you can create a custom keyboard shortcut with the value Clear disk cache
  • Safari users should simultaneously hold down + Option + E. You may need to enable the Develop menu first
  • Chrome: press Ctrl + F5 or Shift + F5 while performing a page reload.
// Preserved as a backup, just in case. From [[Wikipedia:User:Awesome Aasim/rcwidget.js]]. //
//                  //
// Full page history has been imported.         //

if (!rcwidget) {
	var rcwidget = {};
	rcwidget.onlyshowores = (typeof onlyshowores !== 'undefined') ? onlyshowores : false;
	rcwidget.orestolerance = (typeof orestolerance !== 'undefined') ? orestolerance : 0.70;
	rcwidget.fetchtime = (typeof rcfetchtime !== 'undefined') ? rcfetchtime : 0.5
	rcwidget.addToSidebar = function(text) {
		if (mw.config.get("skin") == "timeless") {
	        $('<div class="sidebar-chunk" id="rcwidget"><div class="sidebar-inner">' + text + '</div></div>').appendTo("#mw-related-navigation");
	        $("#catlinks-sidebar").appendTo("#mw-related-navigation");
	        $("#other-languages").appendTo("#mw-related-navigation");
		}
        $('<div class="portal" role="navigation" id="rcwidget" aria-labelledby="p-rcwidget-label">' + text + '</div>').prependTo("#mw-panel");
        $('<div role="navigation" class="portlet generated-sidebar" id="rcwidget" aria-labelledby="p-rcwidget-label">' + text + '</div>').prependTo("#sidebar");
        $('<div class="portlet" id="rcwidget">' + text + '</div>').prependTo("#mw_portlets");
        $("#p-navigation").prependTo("#mw-panel");
        $("#p-search").prependTo("#quickbar");
        $('#p-logo').prependTo("#mw-site-navigation");
        $('#p-logo').prependTo("#mw-panel");
        $('#p-logo').prependTo("#sidebar");
        $('#p-logo').prependTo("#mw_portlets");
        $('ul.hlist:first').appendTo('#mw-mf-page-left');
        if (mw.config.get("skin") == "vector" || mw.config.get("skin") == "vector-2022" ) {
        	$("#rcwidget").addClass("mw-portlet mw-portlet-navigation vector-menu vector-menu-portal");
        }
    };
    rcwidget.fetch = function() {
    	if (!document.hasFocus()) {
    		window.setTimeout(rcwidget.fetch, rcwidget.fetchtime * 1000);
    	} else {
	    	var returnHTML = "";
	    	returnHTML += "<ul>";
	    	$.get(mw.config.get("wgScriptPath") + "/api.php", {
				"action": "query",
				"format": "json",
				"list": "recentchanges",
				"rcnamespace": "0|3",
				"rcprop": "title|timestamp|flags|loginfo|oresscores|parsedcomment|user|ids|tags",
				"rcshow": "!bot" + (rcwidget.onlyshowores ? "|oresreview" : ""),
				"rctoponly": true,
				"rclimit": "50",
				"rctype": "edit|new"
			}).done(function(result) {
				if (result.error) {
					console.error(result.error.info);
		    		window.setTimeout(rcwidget.fetch, rcwidget.fetchtime * 1000);
				} else {
					var currDate = new Date();
					for (var change of result.query.recentchanges) {
						var changeDate = new Date(change.timestamp);
						var mildate = new Date(currDate - changeDate);
						var seconds = mildate.getUTCSeconds();
						var minutes = mildate.getUTCMinutes();
						var hours = mildate.getUTCHours();
						if (typeof change.oresscores != 'undefined') {
							if (typeof change.oresscores.damaging != 'undefined') {
								if (typeof change.oresscores.damaging.true != 'undefined') {
									if (rcwidget.onlyshowores && change.oresscores.damaging.true < rcwidget.orestolerance) {
										continue;
									} else {
										returnHTML += "<li>";
										if (change.type == "edit" && change.oresscores.damaging) {
											if (change.oresscores.damaging.true >= rcwidget.orestolerance) {
												returnHTML += "<b>";
											}
										}
										returnHTML += '<a href="/wiki/User_talk:' + change.user + '">' + change.user + '</a> ';
										switch (change.type) {
											case "edit": 
												if (change.tags.includes("mw-undo")) {
													returnHTML += "<a href=\"/wiki/Project:Undo\">undid</a> an <a href=\"/wiki/Special:Diff/" + change.revid + "\">edit</a> to <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
												} else if (change.tags.includes("mw-rollback")) {
													returnHTML += "<a href=\"/wiki/Project:Rollback\">rolled back</a> edits to <a href=\"/wiki/Special:Diff/" + change.revid + "\">edit</a> to <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
												} else if (change.ns == 3) {
													returnHTML += 'left a message for <a href="/wiki/' + change.title + '">' + change.title.replace("User talk:", "") + "</a>";
												} else {
													returnHTML += "made an <a href=\"/wiki/Special:Diff/" + change.revid + "\">edit</a> to <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
												}
												break;
											case "new":
												if (change.ns == 3) {
													returnHTML += 'left a message for <a href="/wiki/' + change.title + '">' + change.title.replace("User talk:", "") + "</a>";
												} else {
													returnHTML += "created the page <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
												}
												break;
										}
										if (change.type == "edit" && change.oresscores.damaging) {
											if (change.oresscores.damaging.true >= rcwidget.orestolerance) {
												returnHTML += "</b>";
											}
										}
										returnHTML += "<br><small class=\"rcwidget-date\" data-revtimestamp=\"" + change.timestamp + "\">";
										if (hours > 0) {
											returnHTML += " " + hours + ((hours == 1) ? " hour" : " hours") + " ago";
										} else if (minutes > 0) {
											returnHTML += " " + minutes + ((minutes == 1) ? " minute" : " minutes") + " ago";
										} else if (seconds > 0) {
											returnHTML += " " + seconds + ((seconds == 1) ? " second" : " seconds") + " ago";
										}
										returnHTML += "</small>";
										returnHTML += "</li>";
									}
								} else {
									returnHTML += "<li>";
									returnHTML += '<a href="/wiki/User_talk:' + change.user + '">' + change.user + '</a> ';
									switch (change.type) {
										case "edit": 
											if (change.tags.includes("mw-undo")) {
												returnHTML += "<a href=\"/wiki/Project:Undo\">undid</a> an <a href=\"/wiki/Special:Diff/" + change.revid + "\">edit</a> to <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
											} else if (change.tags.includes("mw-rollback")) {
												returnHTML += "<a href=\"/wiki/Project:Rollback\">rolled back</a> edits to <a href=\"/wiki/Special:Diff/" + change.revid + "\">edit</a> to <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
											} else if (change.ns == 3) {
												returnHTML += 'left a message for <a href="/wiki/' + change.title + '">' + change.title.replace("User talk:", "") + "</a>";
											} else {
												returnHTML += "made an <a href=\"/wiki/Special:Diff/" + change.revid + "\">edit</a> to <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
											}
											break;
										case "new":
											if (change.ns == 3) {
												returnHTML += 'left a message for <a href="/wiki/' + change.title + '">' + change.title.replace("User talk:", "") + "</a>";
											} else {
												returnHTML += "created the page <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
											}
											break;
									}
									returnHTML += "<br><small class=\"rcwidget-date\" data-revtimestamp=\"" + change.timestamp + "\">";
									if (hours > 0) {
										returnHTML += " " + hours + ((hours == 1) ? " hour" : " hours") + " ago";
									} else if (minutes > 0) {
										returnHTML += " " + minutes + ((minutes == 1) ? " minute" : " minutes") + " ago";
									} else if (seconds > 0) {
										returnHTML += " " + seconds + ((seconds == 1) ? " second" : " seconds") + " ago";
									}
									returnHTML += "</small>";
									returnHTML += "</li>";
								}
							} else {
								returnHTML += "<li>";
								returnHTML += '<a href="/wiki/User_talk:' + change.user + '">' + change.user + '</a> ';
								switch (change.type) {
									case "edit": 
										if (change.tags.includes("mw-undo")) {
											returnHTML += "<a href=\"/wiki/Project:Undo\">undid</a> an <a href=\"/wiki/Special:Diff/" + change.revid + "\">edit</a> to <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
										} else if (change.tags.includes("mw-rollback")) {
											returnHTML += "<a href=\"/wiki/Project:Rollback\">rolled back</a> edits to <a href=\"/wiki/Special:Diff/" + change.revid + "\">edit</a> to <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
										} else if (change.ns == 3) {
											returnHTML += 'left a message for <a href="/wiki/' + change.title + '">' + change.title.replace("User talk:", "") + "</a>";
										} else {
											returnHTML += "made an <a href=\"/wiki/Special:Diff/" + change.revid + "\">edit</a> to <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
										}
										break;
									case "new":
										if (change.ns == 3) {
											returnHTML += 'left a message for <a href="/wiki/' + change.title + '">' + change.title.replace("User talk:", "") + "</a>";
										} else {
											returnHTML += "created the page <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
										}
										break;
								}
								returnHTML += "<br><small class=\"rcwidget-date\" data-revtimestamp=\"" + change.timestamp + "\">";
								if (hours > 0) {
									returnHTML += " " + hours + ((hours == 1) ? " hour" : " hours") + " ago";
								} else if (minutes > 0) {
									returnHTML += " " + minutes + ((minutes == 1) ? " minute" : " minutes") + " ago";
								} else if (seconds > 0) {
									returnHTML += " " + seconds + ((seconds == 1) ? " second" : " seconds") + " ago";
								}
								returnHTML += "</small>";
								returnHTML += "</li>";
							}
						} else {
							returnHTML += "<li>";
							returnHTML += '<a href="/wiki/User_talk:' + change.user + '">' + change.user + '</a> ';
							switch (change.type) {
								case "edit": 
									if (change.tags.includes("mw-undo")) {
										returnHTML += "<a href=\"/wiki/Project:Undo\">undid</a> an <a href=\"/wiki/Special:Diff/" + change.revid + "\">edit</a> to <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
									} else if (change.tags.includes("mw-rollback")) {
										returnHTML += "<a href=\"/wiki/Project:Rollback\">rolled back</a> edits to <a href=\"/wiki/Special:Diff/" + change.revid + "\">edit</a> to <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
									} else if (change.ns == 3) {
										returnHTML += 'left a message for <a href="/wiki/' + change.title + '">' + change.title.replace("User talk:", "") + "</a>";
									} else {
										returnHTML += "made an <a href=\"/wiki/Special:Diff/" + change.revid + "\">edit</a> to <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
									}
									break;
								case "new":
									if (change.ns == 3) {
										returnHTML += 'left a message for <a href="/wiki/' + change.title + '">' + change.title.replace("User talk:", "") + "</a>";
									} else {
										returnHTML += "created the page <a href=\"/wiki/" + change.title + "\">" + change.title + '</a>';
									}
									break;
							}
							returnHTML += "<br><small class=\"rcwidget-date\" data-revtimestamp=\"" + change.timestamp + "\">";
							if (hours > 0) {
								returnHTML += " " + hours + ((hours == 1) ? " hour" : " hours") + " ago";
							} else if (minutes > 0) {
								returnHTML += " " + minutes + ((minutes == 1) ? " minute" : " minutes") + " ago";
							} else if (seconds > 0) {
								returnHTML += " " + seconds + ((minutes == 1) ? " second" : " seconds") + " ago";
							}
							returnHTML += "</small>";
							returnHTML += "</li>";
						}
					}
					returnHTML += "<li><a href=\"/wiki/Special:RecentChanges\">View all recent changes</a></li>"
		    		returnHTML += "</ul>";
			    	$("#rcwidget-content").html(returnHTML);
			    	if ($("#rcwidget-content").text().toLowerCase() == "View all recent changes".toLowerCase()) {
			    		$("#rcwidget-content").html("<ul><li>No recent changes found.</li></ul>");
			    	}
				}
		    	window.setTimeout(rcwidget.fetch, rcwidget.fetchtime * 1000);
			}).fail(function(result) {
		    	window.setTimeout(rcwidget.fetch, rcwidget.fetchtime * 1000);
			});
    	}
    };
    $("#rcwidget-content").css("height", "auto");
    $("#rcwidget-content").css("overflow", "auto");
	$(document).ready(function() {
        rcwidget.addToSidebar((mw.config.get('skin') == 'vector' || mw.config.get('skin') == 'vector-2022') ? '<div id="rcwidget-label" lang="en" dir="ltr"><span><a href="/wiki/Special:RecentChanges">Recent changes</a></span></div><div class="mw-portlet-body body pBody" id="rcwidget-content" style="height:250px;overflow:hidden;">Loading...</div>' : '<h3 id="rcwidget-label" lang="en" dir="ltr"><span><a href="/wiki/Special:RecentChanges">Recent changes</a></span></h3><div class="mw-portlet-body body pBody" id="rcwidget-content" style="height:250px;overflow:hidden;">Loading...</div>');
        rcwidget.fetch();
    	window.setInterval(function() {
			var currDate = new Date();
    		$('.rcwidget-date').each(function() {
    			var changeDate = new Date($(this).data('revtimestamp'));
				var mildate = new Date(currDate - changeDate);
				var seconds = mildate.getUTCSeconds();
				var minutes = mildate.getUTCMinutes();
				var hours = mildate.getUTCHours();
				if (hours > 0) {
					$(this).html(hours + ((hours == 1) ? " hour" : " hours") + " ago");
				} else if (minutes > 0) {
					$(this).html(minutes + ((minutes == 1) ? " minute" : " minutes") + " ago");
				} else if (seconds > 0) {
					$(this).html(seconds + ((seconds == 1) ? " second" : " seconds") + " ago");
				}
    		})
    	}, rcwidget.fetchtime);
	});
}