// <nowiki>
// Adapted from OneClickWelcomer gadget
function isIPwb(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;
}
$(() => {
var porty;
var porty2;
var userIP = false;
$("#bodyContent").append(`
<div id="welDialog">
What welcome message would you like to add? <br />
<select name="welName" id="welName">
<option>Select the welcome message</option>
<option id="Welcome">Welcome</option>
<option id="Bigwelcome">Welcome (with useful links)</option>
<option id="Classwelcome">Welcome (Wiki Ed)</option>
<option id="Welcomeback">Welcome back</option>
<option id="Cookbookwelcome">Welcome (Cookbook)</option>
<option id="Cookwelcome">Welcome (Cookbook, simplified)</option>
<option id="Welcome-belated">Welcome (belated)</option>
</select><br />
<textarea id="welMessage" name="welMessage"></textarea><br />
<button type="button" class="welUser">Welcome user</button>
</div>
<div id="welDialogIP">
What welcome message would you like to add for this anonymous user? <br />
<select name="welNameIP" id="welNameIP">
<option>Select the welcome message</option>
<option id="Welcome-anon">Welcome (anonymous)</option>
<option id="Joinus">Welcome (anonymous, encouraging)</option>
</select><br />
<textarea id="welMessageIP" name="welMessageIP"></textarea><br />
<button type="button" class="welUser">Welcome user</button>
</div>
`);
(async () => {
if (await waitForPreferences()) {
for (var [i, j] of Object.entries(Luna.myPreferences.welcome)) {
$("#welName").append(`<option id="${i}">${j}</option>`);
}
for (var [k, l] of Object.entries(Luna.myPreferences.welcomeIP)) {
$("#welNameIP").append(`<option id="${k}">${l}</option>`);
}
}
else {
console.error("Luna: Preferences never fully loaded.");
}
})();
$("#welDialog").hide();
$("#welDialogIP").hide();
if (mw.config.get("wgRelevantUserName") !== null) {
if(isIPwb(mw.config.get("wgRelevantUserName"))) {
porty = mw.util.addPortletLink('luna-actions', '#', 'Welcome (IP)', 'luna-welcome-ip', 'Welcome this anonymous user');
userIP = true;
}
porty2 = mw.util.addPortletLink('luna-actions', '#', 'Welcome', 'luna-welcome', 'Welcome this user');
}
else return;
$(porty).click(() => $("#welDialogIP").dialog({ title: "Welcome this anonymous user", width: "auto", height: "auto" } ));
$(porty2).click(() => $("#welDialog").dialog({ title: "Welcome this user", width: "auto", height: "auto" } ));
$(".welUser").click(function() {
var mySelect = userIP ? document.getElementById("welNameIP") : document.getElementById("welName");
var critValue = userIP ? mySelect.options[welNameIP.selectedIndex].id : mySelect.options[welName.selectedIndex].id;
var welMsg = userIP ? document.getElementById("welMessageIP").value : document.getElementById("welMessage").value;
if(critValue == "Select the welcome message") alert("You must select a welcome message.");
else {
var params = {
action: 'edit',
appendtext: `\n{{subst:${critValue}|1=${welMsg}}}\n~~~~`,
title: `User_talk:${mw.config.get("wgRelevantUserName")}`,
summary: `Welcoming user with {{${critValue}}}`,
tags: "Luna",
format: 'json'
},
api = new mw.Api();
api.postWithToken( 'csrf', params ).done( function ( data ) {
console.log( data );
} );
mw.notify("Luna:\nThe welcome message has been added. Redirecting to the user's talk page...");
setTimeout(() => {
if (mw.config.get("wgPageName") == `User_talk:${mw.config.get("wgRelevantUserName")}`) window.location.reload();
else window.location.href = window.location.href.replace(mw.config.get("wgPageName"), `User_talk:${mw.config.get("wgRelevantUserName")}`);
}, 2000);
}
});
});
// </nowiki>