MediaWiki:Gadget-blueUser.js
外观
注意:在发布之后,您可能需要清除浏览器缓存才能看到所作出的更改的影响。
- Firefox或Safari:按住Shift的同时单击刷新,或按Ctrl-F5或Ctrl-R(Mac为⌘-R)
- Google Chrome:按Ctrl-Shift-R(Mac为⌘-Shift-R)
- Edge:按住Ctrl的同时单击刷新,或按Ctrl-F5。
mw.loader.using([
'mediawiki.api',
'mediawiki.util',
'mediawiki.Title'
]).then(function () {
var blueUsers = [];
var missingUsers = [];
if (mw.config.get('wgUserName')) {
blueUsers.push(mw.util.wikiUrlencode(mw.config.get('wgUserName')));
}
var api = new mw.Api({
parameters: {
action: 'query',
list: 'users',
formatversion: 2
},
userAgent: 'Gadget-blueUsers'
});
function getLinkTitle(link) {
var title = mw.util.getParamValue('title', link.href);
if (title) return title;
var pathname = decodeURIComponent(link.pathname);
var articlePath = mw.config.get('wgArticlePath');
var prefix = articlePath.split('$1')[0];
if (prefix && pathname.toLowerCase().startsWith(prefix.toLowerCase())) {
return pathname.slice(prefix.length);
}
return '';
}
function getUserTitle(link) {
var rawTitle = getLinkTitle(link);
if (!rawTitle) return null;
var title = mw.Title.newFromText(rawTitle);
if (!title || title.getNamespaceId() !== 2) return null;
return title;
}
mw.hook('wikipage.content').add(makeUsersBlue);
makeUsersBlue($('a.new').not('#mw-content-text a.new').parent());
function makeUsersBlue($content) {
var users = [];
var userlinks = $content.find('a.new').filter(function () {
return getUserTitle(this) !== null;
}).each(function () {
var title = getUserTitle(this);
if (!title) return;
var username = title.getMainText();
var encodedUsername = mw.util.wikiUrlencode(username);
if (missingUsers.includes(encodedUsername)) return;
if (blueUsers.includes(encodedUsername)) {
this.classList.remove('new');
this.classList.add('mw-newuserlink');
return;
}
if (users.includes(username) || username.includes('/')) return;
users.push(username);
});
if (!users.length) return;
var apiRequests = [];
while (users.length) {
apiRequests.push(
api.get({
ususers: users.splice(0, 50)
}).then(function (data) {
data.query.users.forEach(function (user) {
if (user.missing || user.invalid) {
missingUsers.push(mw.util.wikiUrlencode(user.name));
return;
}
blueUsers.push(mw.util.wikiUrlencode(user.name));
});
})
);
}
Promise.all(apiRequests).then(function () {
userlinks.each(function () {
var title = getUserTitle(this);
if (!title) return;
var username = title.getMainText();
var encodedUsername = mw.util.wikiUrlencode(username);
if (!blueUsers.includes(encodedUsername)) return;
this.classList.remove('new');
this.classList.add('mw-newuserlink');
});
});
}
});