MediaWiki:Gadget-blueUser.js:修订间差异
外观
创建页面,内容为“mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' ] ).then( function () { const namespaceIds = mw.config.get('wgNamespaceIds'); const namespaces = Object.keys( namespaceIds ).filter( ns => namespaceIds[ns] === 2 ); const selector = namespaces.map( ns => mw.config.get('wgArticlePath').replace('$1', ns + ':').toLowerCase() ); // User cache to not check them multiple times. var blueUsers = []; var missingUsers = []; if ( mw.config.get('wgUserName') ) {…” |
小无编辑摘要 |
||
| 第1行: | 第1行: | ||
mw.loader.using( [ 'mediawiki.api', 'mediawiki.util' | 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'); | |||
}); | |||
}); | |||
} | |||
}); | |||
2026年10月1日 (四) 02:11的最新版本
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');
});
});
}
});