Jump to content

User:JJPMaster/Scripts/OneClickWelcomer.js

From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
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") {
		throw new Error("Global OneClickWelcomer has been locally disabled.");
	}
	else {
		parents.forEach((e) => OCWaddLink(e));
		if(mw.config.get("wgCanonicalNamespace") == "User" || mw.config.get("wgCanonicalNamespace") == "User_talk" || mw.config.get("wgCanonicalSpecialPageName") == "Contributions") {
			OCWalternateAddLink();
		}
	}
});