משתמש:מגזין יהלום/Sandbox.js
מראה
הערה: לאחר הפרסום, ייתכן שיהיה צורך לנקות את זיכרון המטמון (cache) של הדפדפן כדי להבחין בשינויים.
- פיירפוקס / ספארי: להחזיק את המקש Shift בעת לחיצה על טעינה מחדש (Reload) או ללחוץ על צירוף המקשים Ctrl-F5 או Ctrl-R (במחשב מק: ⌘-R).
- גוגל כרום: ללחוץ על צירוף המקשים Ctrl-Shift-R (במחשב מק: ⌘-Shift-R).
- אדג': להחזיק את המקש Ctrl בעת לחיצה על רענן (Refresh) או ללחוץ על צירוף המקשים Ctrl-F5.
if (
mw.config.get("wgCanonicalSpecialPageName") === "Contributions" &&
mw.config.get("wgRelevantUserName") !== mw.config.get("wgUserName")
) {
mw.loader.load(
"//he.wikipedia.org/w/index.php?title=משתמש:Guycn2/Sandbox.css" +
"&action=raw&ctype=text/css", "text/css"
);
$.when(mw.loader.using(["mediawiki.util", "mediawiki.api"]), $.ready).done(function() {
"use strict";
var relevantUser = mw.config.get("wgRelevantUserName"),
api = new mw.Api(),
currentUserRights = [],
relevantUserGender = [],
interfaceMessages = {},
isRelevantUserAnon = mw.util.isIPAddress(relevantUser),
contribsPeriod = 0,
queryLimit = 0,
latestEdits = [],
totalEdits = 0,
createdPages = [],
totalPages = 0,
revIDs = [],
totalIDs = 0,
tagExists = true,
$dialog = {},
isRollbackChecked = false,
isDeleteChecked = false,
isBlockChecked = false,
isRevDeleteChecked = false,
isHideSummariesChecked = false,
cleanerSummary = "",
blockDuration = "",
totalTasks = 0,
currentTask = 0,
failedTasks = false,
editNumber = 0,
rollbackPercent = 0,
pageNumber = 0,
deletePercent = 0,
idNumber = 0,
revDeletePercent = 0;
api.get({
list: "users",
usprop: "rights|gender",
ususers: relevantUser + "|" + mw.config.get("wgUserName")
}).done(function(data) {
var relevantUserRights = data.query.users[0].rights;
currentUserRights = data.query.users[1].rights;
relevantUserGender = data.query.users[0].gender;
if (
isRelevantUserAnon ||
(
typeof relevantUserRights !== "undefined" &&
relevantUserRights.indexOf("autopatrol") < 0
)
) {
$.getScript(
"//he.wikipedia.org/w/index.php?title=משתמש:Guycn2/Sandbox2.js" +
"&action=raw&ctype=text/javascript",
function() {
interfaceMessages =
window.vandalCleanerConfig.messages[mw.config.get("wgUserLanguage")] ||
window.vandalCleanerConfig.messages.en;
contribsPeriod = window.vandalCleanerConfig.contribsPeriod;
if (currentUserRights.indexOf("noratelimit") < 0) {
// User is limited to 100 rollbacks per minute
queryLimit = window.vandalCleanerConfig.smallQueryLimit;
} else {
// User is not subject to rate limits
queryLimit = window.vandalCleanerConfig.largeQueryLimit;
}
$("#contentSub").after(
$("<button>", {
type: "button",
"class": "mw-ui-button mw-ui-destructive",
id: "vandal-cleaner-button",
title: i18n("contribsButtonTooltip"),
text: i18n("contribsButtonText")
}).on("click", function() {
initializeTool(setOldestContribsDate());
})
);
}
);
}
});
function i18n(key) {
key = interfaceMessages[key] || key;
var isAnonPattern = /<<ISANON\|(.*?)\|(.*?)(>>)/g,
genderPattern = /<<GENDER\|(.*?)\|(.*?)(>>)/g,
extendedGenderPattern = /<<GENDER\|(.*?)\|(.*?)\|(.*?)(>>)/g;
key = key
.replace(isAnonPattern, isRelevantUserAnon ? "$1" : "$2")
.replace(
extendedGenderPattern,
relevantUserGender === "female" ? "$2" :
(relevantUserGender === "male" ? "$1" : "$3")
)
.replace(genderPattern, relevantUserGender === "female" ? "$2" : "$1")
.replace(/\$RELEVANTUSER/g, relevantUser)
.replace(/\$CONTRIBSPERIOD/g, contribsPeriod)
.replace(/\$QUERYLIMIT/g, queryLimit)
.replace(/(<<|>>)/g, "");
return key;
}
function initializeTool(oldestContribsDate) {
if ($(".vandal-cleaner-interface-dialog").length) {
console.log("Vandal Cleaner dialog is already open.");
return;
}
mw.util.$content.append(
$("<div>", {
"class": "vandal-cleaner-dark-cover"
}).append(
$("<img>", {
id: "vandal-cleaner-loading-image",
src: "//upload.wikimedia.org/wikipedia/commons/1/14/Ajax-loader_bert2_blue-white.gif",
alt: i18n("loadingInterface")
})
)
);
var $loadingCover = $(".vandal-cleaner-dark-cover").fadeTo("_default", 1);
api.get({
list: "usercontribs",
ucuser: relevantUser,
ucprop: "title",
ucshow: "top|!new",
uclimit: queryLimit + 1,
ucend: oldestContribsDate
}).done(function(editsQuery) {
latestEdits = editsQuery.query.usercontribs;
totalEdits = latestEdits.length;
api.get({
list: "usercontribs",
ucuser: relevantUser,
ucprop: "title",
ucshow: "new",
uclimit: queryLimit + 1,
ucend: oldestContribsDate
}).done(function(pagesQuery) {
createdPages = pagesQuery.query.usercontribs;
totalPages = createdPages.length;
api.get({
list: "usercontribs",
ucuser: relevantUser,
ucprop: "ids",
ucshow: "!new",
uclimit: queryLimit + 1,
ucend: oldestContribsDate
}).done(function(idsQuery) {
revIDs = idsQuery.query.usercontribs;
totalIDs = revIDs.length;
// Check if [[MediaWiki:Tag-VandalCleaner]] exists to
// determine whether or not actions made using this
// script should be tagged.
api.get({
titles: "MediaWiki:Tag-VandalCleaner"
}).done(function(tagQuery) {
if (tagQuery.query.pages[-1]) {
// If [[MediaWiki:Tag-VandalCleaner]] does not exist,
// then the actual "VandalCleaner" tag is also not
// likely to exist. In this case, actions made using
// this script must NOT be tagged; otherwise they will
// fail with the "tags-apply-not-allowed-one" error.
tagExists = false;
}
createDialog($loadingCover);
});
});
});
});
}
function setOldestContribsDate() {
var date = new Date();
date.setTime(date.getTime() - (contribsPeriod * 24 * 60 * 60 * 1000));
var year = date.getUTCFullYear(),
month = date.getUTCMonth() + 1,
day = date.getUTCDate(),
hours = date.getUTCHours(),
minutes = date.getUTCMinutes(),
seconds = date.getUTCSeconds();
return year + "-" +
(month < 10 ? "0" + month : month) + "-" +
(day < 10 ? "0" + day : day) + "T" +
(hours < 10 ? "0" + hours : hours) + ":" +
(minutes < 10 ? "0" + minutes : minutes) + ":" +
(seconds < 10 ? "0" + seconds : seconds) + "Z";
}
function createDialog($loadingCover) {
$dialog = $("<div>", {
"class": "vandal-cleaner-interface-dialog"
});
}
});
}