mw.loader.load( `//en.wikipedia.org/w/index.php?title=User:${mw.config.get("wgUserName")}/OneClickWelcomerGlobalPreferences.js&action=raw&ctype=text/javascript` );
mw.loader.load( `//${mw.config.get("wgServer")}/w/index.php?title=User:${mw.config.get("wgUserName")}/OneClickWelcomerPreferences.js&action=raw&ctype=text/javascript` );
if (typeof globalAllAreWelcome == "undefined") globalAllAreWelcome = true;
if (typeof localAllAreWelcome == "undefined") localAllAreWelcome = true;
// if (typeof globalOCW == "undefined") globalOCW = true;
function welcome(username) {
var OCWparams;
var api;
if (isIP(username) && (!globalAllAreWelcome || !localAllAreWelcome)) {
OCWparams = {
action: 'edit',
title: "User talk:" + username,
appendtext: "\n{" + "{subst:Welcome-anon}} ~~" + "~~",
summary: "Welcomed new anonymous user with [[w:en:User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]",
format: 'json'
},
api = new mw.Api();
}
else {
OCWparams = {
action: 'edit',
title: "User talk:" + username,
appendtext: "\n{" + "{subst:Welcome}} ~~" + "~~",
summary: "Welcomed new user with [[w:en:User:JJPMaster/OneClickWelcomer.js|OneClickWelcomer]]",
format: 'json'
},
api = new mw.Api();
}
api.postWithToken( 'csrf', OCWparams ).done( function ( data ) {
console.log( data );
} );
mw.notify($(`<a target="_blank" style="color: black; text-decoration: none;" href="/wiki/User_talk:${username}">Successfully welcomed the user. Click here to redirect to the user talk page.</a>`));
}
function isIP(username) {
const regex = /(?:^(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}$)|(?:^(?:(?:[a-fA-F\d]{1,4}:){7}(?:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){6}(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|:[a-fA-F\d]{1,4}|:)|(?:[a-fA-F\d]{1,4}:){5}(?::(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,2}|:)|(?:[a-fA-F\d]{1,4}:){4}(?:(?::[a-fA-F\d]{1,4}){0,1}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,3}|:)|(?:[a-fA-F\d]{1,4}:){3}(?:(?::[a-fA-F\d]{1,4}){0,2}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,4}|:)|(?:[a-fA-F\d]{1,4}:){2}(?:(?::[a-fA-F\d]{1,4}){0,3}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,5}|:)|(?:[a-fA-F\d]{1,4}:){1}(?:(?::[a-fA-F\d]{1,4}){0,4}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,6}|:)|(?::(?:(?::[a-fA-F\d]{1,4}){0,5}:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(?:\\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)){3}|(?::[a-fA-F\d]{1,4}){1,7}|:)))(?:%[0-9a-zA-Z]{1,})?$)/gm;
if (regex.test(username)) {
return true;
}
return false;
}
// From "What is Object Equality in JavaScript" on GFG
function shallowEqual(obj1, obj2) {
const keys1 = Object.keys(obj1);
const keys2 = Object.keys(obj2);
if (keys1.length !== keys2.length) {
return false;
}
for (let key of keys1) {
if (!obj2.hasOwnProperty(key) || obj1[key] !== obj2[key]) {
return false;
}
}
return true;
}
// Adapted from [[User:BrandonXLF/Restorer.js]]
$(() => {
function OCWaddLink(item) {
var links = item.querySelector('.mw-usertoollinks');
var parent = document.createElement('span'),
el = document.createElement('a');
el.addEventListener('click', function() {
el.className = 'welcomer-loading';
welcome(getUser(parent));
});
el.textContent = 'welcome';
parent.appendChild(el);
if (links !== null)
links.appendChild(parent);
}
var parents = document.querySelectorAll('[data-mw-revid]');
function getUser(parent) {
return $(parent).closest("[data-mw-revid]").find("a.mw-userlink").find("bdi").text();
}
function OCWalternateAddLink() {
mw.util.addPortletLink('p-tb', '#', 'Welcome', 'OCWwelcome', 'Welcome this user');
$("#OCWwelcome").click(() => {
welcome(mw.config.get("wgRelevantUserName"));
});
}
if(mw.config.get("wgDBname") == "enwikibooks") {
console.log("Global OneClickWelcomer has been locally disabled.");
return;
}
else {
parents.forEach((e) => OCWaddLink(e));
if(mw.config.get("wgCanonicalNamespace") == "User" || mw.config.get("wgCanonicalNamespace") == "User_talk" || mw.config.get("wgCanonicalSpecialPageName") == "Contributions") {
OCWalternateAddLink();
}
}
});