MediaWiki:Common.js: Difference between revisions
No edit summary Tag: Reverted |
Tag: Undo |
||
| Line 109: | Line 109: | ||
/* Jakes Recent Changes Portlet */ | /* Jakes Recent Changes Portlet */ | ||
(function () { | (function () { | ||
function jakeTimeAgo(date) { | function jakeTimeAgo(date) { | ||
var s = Math.floor((Date.now() - date.getTime()) / 1000); | var s = Math.floor((Date.now() - date.getTime()) / 1000); | ||
| Line 127: | Line 120: | ||
} | } | ||
function | function jakeBuildPortlet() { | ||
var menu = | |||
document.getElementById("vector-main-menu") || | document.getElementById("vector-main-menu") || | ||
document.getElementById("mw-panel"); | |||
document.getElementById("mw-panel" | |||
if (!menu) return null; | if (!menu) return null; | ||
if (document.getElementById("p-jake-recentchanges")) return null; | |||
if ( | |||
var portlet = document.createElement("div"); | var portlet = document.createElement("div"); | ||
portlet.id = | portlet.id = "p-jake-recentchanges"; | ||
portlet.className = "vector-menu mw-portlet"; | portlet.className = "vector-menu mw-portlet"; | ||
| Line 162: | Line 141: | ||
var ul = document.createElement("ul"); | var ul = document.createElement("ul"); | ||
ul.className = "vector-menu-content-list"; | ul.className = "vector-menu-content-list"; | ||
ul.id = | ul.id = "jake-rc-list"; | ||
var moreWrap = document.createElement("div"); | var moreWrap = document.createElement("div"); | ||
| Line 170: | Line 149: | ||
moreLink.href = mw.util.getUrl("Special:RecentChanges"); | moreLink.href = mw.util.getUrl("Special:RecentChanges"); | ||
moreLink.textContent = "Show more…"; | moreLink.textContent = "Show more…"; | ||
moreWrap.appendChild(moreLink); | |||
content.appendChild(ul); | content.appendChild(ul); | ||
content.appendChild(moreWrap); | content.appendChild(moreWrap); | ||
| Line 178: | Line 157: | ||
portlet.appendChild(content); | portlet.appendChild(content); | ||
var | var discordPortlet = menu.querySelector("#p-Community"); | ||
if (discordPortlet && discordPortlet.parentNode) { | |||
menu.querySelector("#p-navigation") | discordPortlet.parentNode.insertBefore(portlet, discordPortlet.nextSibling); | ||
} else { | |||
var navPortlet = menu.querySelector("#p-navigation"); | |||
if (navPortlet && navPortlet.parentNode) { | |||
navPortlet.parentNode.insertBefore(portlet, navPortlet.nextSibling); | |||
} else { | |||
menu.appendChild(portlet); | |||
} | |||
} | |||
return ul; | return ul; | ||
} | } | ||
function | function jakeLoadRecentChanges(ul) { | ||
if (!ul) return; | if (!ul) return; | ||
var api = new mw.Api(); | |||
api | |||
.get({ | |||
action: "query", | |||
list: "recentchanges", | |||
rcnamespace: 0, | |||
rclimit: 5, | |||
rcprop: "title|timestamp|user", | |||
rcshow: "!bot", | |||
formatversion: 2 | |||
}) | |||
.then(function (data) { | |||
var items = | |||
data && data.query && data.query.recentchanges | |||
? data.query.recentchanges | |||
: []; | |||
ul.textContent = ""; | |||
for (var i = 0; i < items.length; i++) { | |||
var rc = items[i]; | |||
var li = document.createElement("li"); | |||
li.className = "mw-list-item jake-rc-item"; | |||
var a = document.createElement("a"); | |||
a.href = mw.util.getUrl(rc.title); | |||
a.textContent = rc.title; | |||
var meta = document.createElement("div"); | |||
meta.className = "jake-rc-meta"; | |||
meta.textContent = jakeTimeAgo(new Date(rc.timestamp)) + " · " + (rc.user || ""); | |||
li.appendChild(a); | |||
li.appendChild(meta); | |||
ul.appendChild(li); | |||
} | |||
}) | |||
.catch(function () { | |||
ul.textContent = ""; | |||
var li = document.createElement("li"); | |||
li.className = "mw-list-item jake-rc-item"; | |||
var a = document.createElement("a"); | |||
a.href = mw.util.getUrl("Special:RecentChanges"); | |||
a.textContent = "View recent changes"; | |||
li.appendChild(a); | |||
ul.appendChild(li); | |||
}); | |||
} | } | ||
function | function jakeInitRecentChanges() { | ||
var ul = document.getElementById( | if (!window.mw || !mw.util || !mw.Api) return; | ||
var ul = jakeBuildPortlet(); | |||
if (!ul) ul = document.getElementById("jake-rc-list"); | |||
if (!ul) return; | if (!ul) return; | ||
jakeLoadRecentChanges(ul); | |||
setInterval(function () { | |||
jakeLoadRecentChanges(ul); | |||
}, 60000); | |||
}); | |||
} | } | ||
function | function jakeWaitForMenu() { | ||
var tries = 0; | |||
var timer = setInterval(function () { | |||
var menu = | var menu = | ||
document.getElementById("vector-main-menu") || | |||
document.getElementById("mw-panel"); | |||
if ( | if (menu) { | ||
clearInterval(timer); | |||
jakeInitRecentChanges(); | |||
return; | |||
} | } | ||
tries++; | |||
if (tries > 50) clearInterval(timer); | |||
}, 200); | |||
} | } | ||
jakeWaitForMenu(); | |||
})(); | |||
/* */ | /* */ | ||
(function () { | (function () { | ||