- Portals
- The Current Year
- ED in the News
- Admins
- Help ED Rebuild
- Archive
- ED Bookmarklet
- Donate Bitcoin
Contact an admin on Discord or EDF if you want an account. Also fuck bots.
User:Tabs/Scripts/lastEdit.js
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.
// This script reimplements the last edit banner used on mobile
// License: CC0
function requestRevision() {
// If we're not reading an article, do nothing
if (!(mw.config.get("wgAction") === "view"
&& mw.config.get("wgIsArticle")
&& !mw.config.get("wgIsMainPage"))) {
return;
}
// API docs: https://www.mediawiki.org/wiki/API:Revisions
var apiUrl = location.origin + "/w/api.php";
$.ajax({
url: apiUrl,
data: {
action: "query",
prop: "revisions",
format: "json",
titles: mw.config.get("wgPageName"),
rvprop: "timestamp|user|comment|tags|ids"
},
success: parseEdit
});
}
function parseEdit(response) {
var pageId = mw.config.get("wgArticleId");
try {
var pageInfo = response.query.pages[pageId].revisions[0];
} catch (e) {
return;
}
var relativeTimestamp = calculateRelativeTimestamp(pageInfo.timestamp);
var editComment = pageInfo.comment;
if (!editComment) {
editComment = "[No edit summary]";
}
editComment = editComment.replace(/'/g, "'"); // HTML encode quotes
var lastEdit = "<a href='/wiki/Special:Diff/" + pageInfo.revid
+ "' title='" + editComment + "'> Last edited "
+ relativeTimestamp + " ago</a>";
var lastEditor = "<a href='/wiki/Special:Contributions/" + pageInfo.user
+ "'>" + pageInfo.user + "</a>";
// Can be filtered if needed
var pageTags = "";
if (pageInfo.tags.length > 0) {
pageTags = "<span class='mw-tag-markers'> (" + pageInfo.tags
+ ")</span>";
}
var noticeText = lastEdit + " by " + lastEditor + pageTags;
var notice = "<div id='lastEdit' style='float: right;'>" + noticeText
+ "</div>";
displayEdit(notice);
}
// Adapted from https://github.com/wikimedia/mediawiki-extensions-MobileFrontend/blob/master/resources/mobile.modifiedBar/time.js
function calculateRelativeTimestamp(timestamp) {
// Supposedly Date parsing is a bit wonky with respect to browsers and
// timezones, but since we have an ISO-6801 date we can risk it
var editTimestamp = new Date(timestamp).getTime() / 1000;
var currentTimestamp = Math.round( new Date().getTime() / 1000);
var timestampDelta = currentTimestamp - editTimestamp;
var units = [ 'second', 'minute', 'hour', 'day', 'month', 'year' ],
limits = [ 1, 60, 3600, 86400, 2592000, 31536000 ];
var i = 0;
while ( i < limits.length && timestampDelta > limits[i + 1] ) {
++i;
}
var delta = Math.round(timestampDelta / limits[i]);
var deltaUnit = units[i];
// Pluralize units
if (delta > 1) {
deltaUnit += "s";
}
return delta + " " + deltaUnit;
}
// Display the last edit info to the right of the site subhead
function displayEdit(notice) {
// [[MediaWiki:Gadget-metadata.js]] replaces the siteSub element so wait
// for it to run first
// Check if script is enabled and if it hasn't ran already
if ($("script").text().search("ext.gadget.metadata") != -1
&& !$(".assess-article-rating").length) {
var target = document.querySelector("#siteSub");
var observer = new MutationObserver(function(mutations) { // IE 11+
$("#siteSub").append(notice);
observer.disconnect();
});
observer.observe(target, {childList: true});
} else {
$("#siteSub").append(notice);
}
// Unfortunately [[Template:Coords]] absolutely positions itself so we
// have to move it down so we don't get obscured
var sheet = window.document.styleSheets[0];
sheet.insertRule('#coordinates { top: 2em !important; }',
sheet.cssRules.length);
}
if (mw.config.get( 'skin' ) != "minerva") {
$(requestRevision);
}