MediaWiki:Gadget-RcPopularPages.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.
// Creates a list of popular pages on Special:RecentChanges
// by Espyo
$(function() {
'use strict';
const PAGES_TO_SHOW = 10;
var popularListSpan = null;
function addScanButton() {
var popularSpan = document.createElement('span');
document.querySelector('.rcoptions').appendChild(popularSpan);
var popularLabelSpan = document.createElement('span');
popularSpan.appendChild(popularLabelSpan);
popularLabelSpan.innerHTML = 'Popular pages in this list: ';
popularListSpan = document.createElement('span');
popularSpan.appendChild(popularListSpan);
var scanA = document.createElement('a');
popularListSpan.appendChild(scanA);
scanA.onclick = scan;
scanA.innerHTML = '[Show]';
}
function scan() {
var lines = document.querySelectorAll('div.mw-changeslist a.mw-changeslist-title');
if(lines.length == 0) return;
var editsByPage = {};
for(var i = 0; i < lines.length; i++) {
var page = lines[i].innerHTML;
if(page in editsByPage) {
editsByPage[page][1]++;
} else {
editsByPage[page] = [lines[i], 1];
}
}
var pairs = Object.keys(editsByPage).map(function(key) {
return [key, editsByPage[key][0], editsByPage[key][1]];
});
pairs.sort(function(a, b) {
return b[2] - a[2];
});
popularListSpan.innerHTML = '';
var pagesToShow = Math.min(PAGES_TO_SHOW, pairs.length);
for(var p = 0; p < pagesToShow; p++) {
var newLink = pairs[p][1].cloneNode();
newLink.innerHTML = pairs[p][1].innerHTML;
var text = ' (' + pairs[p][2] + ')';
if(p < pagesToShow - 1) {
text += ' | ';
}
popularListSpan.appendChild(newLink);
popularListSpan.appendChild(document.createTextNode(text));
}
}
if(!mw || mw.config.get('wgPageName') != 'Special:RecentChanges') return;
addScanButton();
});