MediaWiki:Gadget-friendlyshared.js: Difference between revisions

From TestWiki
Content added Content deleted
imported>MusikAnimal
(v2.0 at 19598c4: Clean up, avoid unnecessary jQuery use (#399))
imported>Amorymeltzer
(Repo at d404881: Greatly expand style guidelines, enforce linting rules (#657))
 
(One intermediate revision by the same user not shown)
Line 1: Line 1:
//<nowiki>
// <nowiki>




(function($){
(function($) { // eslint-disable-line no-unused-vars




Line 15: Line 15:


Twinkle.shared = function friendlyshared() {
Twinkle.shared = function friendlyshared() {
if( mw.config.get('wgNamespaceNumber') === 3 && mw.util.isIPAddress(mw.config.get('wgTitle')) ) {
if (mw.config.get('wgNamespaceNumber') === 3 && mw.util.isIPAddress(mw.config.get('wgTitle'))) {
var username = mw.config.get('wgTitle').split( '/' )[0].replace( /\"/, "\\\""); // only first part before any slashes
var username = mw.config.get('wgRelevantUserName');
Twinkle.addPortletLink( function(){ Twinkle.shared.callback(username); }, "Shared IP", "friendly-shared", "Shared IP tagging" );
Twinkle.addPortletLink(function() {
Twinkle.shared.callback(username);
}, 'Shared IP', 'friendly-shared', 'Shared IP tagging');
}
}
};
};


Twinkle.shared.callback = function friendlysharedCallback() {
Twinkle.shared.callback = function friendlysharedCallback() {
var Window = new Morebits.simpleWindow( 600, 420 );
var Window = new Morebits.simpleWindow(600, 420);
Window.setTitle( "Shared IP address tagging" );
Window.setTitle('Shared IP address tagging');
Window.setScriptName( "Twinkle" );
Window.setScriptName('Twinkle');
Window.addFooterLink( "Twinkle help", "WP:TW/DOC#shared" );
Window.addFooterLink('Twinkle help', 'WP:TW/DOC#shared');


var form = new Morebits.quickForm( Twinkle.shared.callback.evaluate );
var form = new Morebits.quickForm(Twinkle.shared.callback.evaluate);


var div = form.append( {
var div = form.append({
type: 'div',
type: 'div',
id: 'sharedip-templatelist',
id: 'sharedip-templatelist',
className: 'morebits-scrollbox'
className: 'morebits-scrollbox'
}
}
);
);
div.append( { type: 'header', label: 'Shared IP address templates' } );
div.append({ type: 'header', label: 'Shared IP address templates' });
div.append( { type: 'radio', name: 'shared', list: Twinkle.shared.standardList,
div.append({ type: 'radio', name: 'shared', list: Twinkle.shared.standardList,
event: function( e ) {
event: function(e) {
Twinkle.shared.callback.change_shared( e );
Twinkle.shared.callback.change_shared(e);
e.stopPropagation();
e.stopPropagation();
}
}
} );
});


var org = form.append( { type:'field', label:'Fill in other details (optional) and click \"Submit\"' } );
var org = form.append({ type: 'field', label: 'Fill in other details (optional) and click "Submit"' });
org.append( {
org.append({
type: 'input',
type: 'input',
name: 'organization',
name: 'organization',
label: 'IP address owner/operator',
label: 'IP address owner/operator',
disabled: true,
disabled: true,
tooltip: 'You can optionally enter the name of the organization that owns/operates the IP address. You can use wikimarkup if necessary.'
tooltip: 'You can optionally enter the name of the organization that owns/operates the IP address. You can use wikimarkup if necessary.'
}
}
);
);
org.append( {
org.append({
type: 'input',
type: 'input',
name: 'host',
name: 'host',
label: 'Host name (optional)',
label: 'Host name (optional)',
disabled: true,
disabled: true,
tooltip: 'The host name (for example, proxy.example.com) can be optionally entered here and will be linked by the template.'
tooltip: 'The host name (for example, proxy.example.com) can be optionally entered here and will be linked by the template.'
}
}
);
);
org.append( {
org.append({
type: 'input',
type: 'input',
name: 'contact',
name: 'contact',
label: 'Contact information (only if requested)',
label: 'Contact information (only if requested)',
disabled: true,
disabled: true,
tooltip: 'You can optionally enter some contact details for the organization. Use this parameter only if the organization has specifically requested that it be added. You can use wikimarkup if necessary.'
tooltip: 'You can optionally enter some contact details for the organization. Use this parameter only if the organization has specifically requested that it be added. You can use wikimarkup if necessary.'
}
}
);
);


form.append( { type:'submit' } );
form.append({ type: 'submit' });


var result = form.render();
var result = form.render();
Window.setContent( result );
Window.setContent(result);
Window.display();
Window.display();
};
};
Line 121: Line 123:


Twinkle.shared.callback.change_shared = function friendlysharedCallbackChangeShared(e) {
Twinkle.shared.callback.change_shared = function friendlysharedCallbackChangeShared(e) {
e.target.form.contact.disabled = (e.target.value !== 'Shared IP edu'); // only supported by {{Shared IP edu}}
e.target.form.contact.disabled = e.target.value !== 'Shared IP edu'; // only supported by {{Shared IP edu}}
e.target.form.organization.disabled = false;
e.target.form.organization.disabled = false;
e.target.form.host.disabled = (e.target.value === 'Whois'); // host= not supported by {{Whois}}
e.target.form.host.disabled = e.target.value === 'Whois'; // host= not supported by {{Whois}}
};
};


Twinkle.shared.callbacks = {
Twinkle.shared.callbacks = {
main: function( pageobj ) {
main: function(pageobj) {
var params = pageobj.getCallbackParameters();
var params = pageobj.getCallbackParameters();
var pageText = pageobj.getPageText();
var pageText = pageobj.getPageText();
Line 133: Line 135:
var text = '{{';
var text = '{{';


for( var i=0; i < Twinkle.shared.standardList.length; i++ ) {
for (var i = 0; i < Twinkle.shared.standardList.length; i++) {
var tagRe = new RegExp( '(\\{\\{' + Twinkle.shared.standardList[i].value + '(\\||\\}\\}))', 'im' );
var tagRe = new RegExp('(\\{\\{' + Twinkle.shared.standardList[i].value + '(\\||\\}\\}))', 'im');
if( tagRe.exec( pageText ) ) {
if (tagRe.exec(pageText)) {
Morebits.status.warn( 'Info', 'Found {{' + Twinkle.shared.standardList[i].value + '}} on the user\'s talk page already...aborting' );
Morebits.status.warn('Info', 'Found {{' + Twinkle.shared.standardList[i].value + '}} on the user\'s talk page already...aborting');
found = true;
found = true;
}
}
}
}


if( found ) {
if (found) {
return;
return;
}
}


Morebits.status.info( 'Info', 'Will add the shared IP address template to the top of the user\'s talk page.' );
Morebits.status.info('Info', 'Will add the shared IP address template to the top of the user\'s talk page.');
text += params.value + '|' + params.organization;
text += params.value + '|' + params.organization;
if( params.value === 'Shared IP edu' && params.contact !== '') {
if (params.value === 'Shared IP edu' && params.contact !== '') {
text += '|' + params.contact;
text += '|' + params.contact;
}
}
if( params.value !== 'Whois' && params.host !== '' ) {
if (params.value !== 'Whois' && params.host !== '') {
text += '|host=' + params.host;
text += '|host=' + params.host;
}
}
Line 165: Line 167:


Twinkle.shared.callback.evaluate = function friendlysharedCallbackEvaluate(e) {
Twinkle.shared.callback.evaluate = function friendlysharedCallbackEvaluate(e) {
var shared = e.target.getChecked( 'shared' );
var shared = e.target.getChecked('shared');
if( !shared || shared.length <= 0 ) {
if (!shared || shared.length <= 0) {
alert( 'You must select a shared IP address template to use!' );
alert('You must select a shared IP address template to use!');
return;
return;
}
}
Line 173: Line 175:
var value = shared[0];
var value = shared[0];


if( e.target.organization.value === '') {
if (e.target.organization.value === '') {
alert( 'You must input an organization for the {{' + value + '}} template!' );
alert('You must input an organization for the {{' + value + '}} template!');
return;
return;
}
}
Line 185: Line 187:
};
};


Morebits.simpleWindow.setButtonsEnabled( false );
Morebits.simpleWindow.setButtonsEnabled(false);
Morebits.status.init( e.target );
Morebits.status.init(e.target);


Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
Morebits.wiki.actionCompleted.notice = "Tagging complete, reloading talk page in a few seconds";
Morebits.wiki.actionCompleted.notice = 'Tagging complete, reloading talk page in a few seconds';


var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), "User talk page modification");
var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), 'User talk page modification');
wikipedia_page.setFollowRedirect(true);
wikipedia_page.setFollowRedirect(true);
wikipedia_page.setCallbackParameters(params);
wikipedia_page.setCallbackParameters(params);
Line 199: Line 201:




//</nowiki>
// </nowiki>

Latest revision as of 19:48, 12 June 2019

// <nowiki>


(function($) { // eslint-disable-line no-unused-vars


/*
 ****************************************
 *** friendlyshared.js: Shared IP tagging module
 ****************************************
 * Mode of invocation:     Tab ("Shared")
 * Active on:              Existing IP user talk pages
 * Config directives in:   FriendlyConfig
 */

Twinkle.shared = function friendlyshared() {
	if (mw.config.get('wgNamespaceNumber') === 3 && mw.util.isIPAddress(mw.config.get('wgTitle'))) {
		var username = mw.config.get('wgRelevantUserName');
		Twinkle.addPortletLink(function() {
			Twinkle.shared.callback(username);
		}, 'Shared IP', 'friendly-shared', 'Shared IP tagging');
	}
};

Twinkle.shared.callback = function friendlysharedCallback() {
	var Window = new Morebits.simpleWindow(600, 420);
	Window.setTitle('Shared IP address tagging');
	Window.setScriptName('Twinkle');
	Window.addFooterLink('Twinkle help', 'WP:TW/DOC#shared');

	var form = new Morebits.quickForm(Twinkle.shared.callback.evaluate);

	var div = form.append({
		type: 'div',
		id: 'sharedip-templatelist',
		className: 'morebits-scrollbox'
	}
	);
	div.append({ type: 'header', label: 'Shared IP address templates' });
	div.append({ type: 'radio', name: 'shared', list: Twinkle.shared.standardList,
		event: function(e) {
			Twinkle.shared.callback.change_shared(e);
			e.stopPropagation();
		}
	});

	var org = form.append({ type: 'field', label: 'Fill in other details (optional) and click "Submit"' });
	org.append({
		type: 'input',
		name: 'organization',
		label: 'IP address owner/operator',
		disabled: true,
		tooltip: 'You can optionally enter the name of the organization that owns/operates the IP address.  You can use wikimarkup if necessary.'
	}
	);
	org.append({
		type: 'input',
		name: 'host',
		label: 'Host name (optional)',
		disabled: true,
		tooltip: 'The host name (for example, proxy.example.com) can be optionally entered here and will be linked by the template.'
	}
	);
	org.append({
		type: 'input',
		name: 'contact',
		label: 'Contact information (only if requested)',
		disabled: true,
		tooltip: 'You can optionally enter some contact details for the organization.  Use this parameter only if the organization has specifically requested that it be added.  You can use wikimarkup if necessary.'
	}
	);

	form.append({ type: 'submit' });

	var result = form.render();
	Window.setContent(result);
	Window.display();
};

Twinkle.shared.standardList = [
	{
		label: '{{Shared IP}}: standard shared IP address template',
		value: 'Shared IP',
		tooltip: 'IP user talk page template that shows helpful information to IP users and those wishing to warn, block or ban them'
	},
	{
		label: '{{Shared IP edu}}: shared IP address template modified for educational institutions',
		value: 'Shared IP edu'
	},
	{
		label: '{{Shared IP corp}}: shared IP address template modified for businesses',
		value: 'Shared IP corp'
	},
	{
		label: '{{Shared IP public}}: shared IP address template modified for public terminals',
		value: 'Shared IP public'
	},
	{
		label: '{{Shared IP gov}}: shared IP address template modified for government agencies or facilities',
		value: 'Shared IP gov'
	},
	{
		label: '{{Dynamic IP}}: shared IP address template modified for organizations with dynamic addressing',
		value: 'Dynamic IP'
	},
	{
		label: '{{Static IP}}: shared IP address template modified for static IP addresses',
		value: 'Static IP'
	},
	{
		label: '{{ISP}}: shared IP address template modified for ISP organizations (specifically proxies)',
		value: 'ISP'
	},
	{
		label: '{{Mobile IP}}: shared IP address template modified for mobile phone companies and their customers',
		value: 'Mobile IP'
	},
	{
		label: '{{Whois}}: template for IP addresses in need of monitoring, but unknown whether static, dynamic or shared',
		value: 'Whois'
	}
];

Twinkle.shared.callback.change_shared = function friendlysharedCallbackChangeShared(e) {
	e.target.form.contact.disabled = e.target.value !== 'Shared IP edu';  // only supported by {{Shared IP edu}}
	e.target.form.organization.disabled = false;
	e.target.form.host.disabled = e.target.value === 'Whois';  // host= not supported by {{Whois}}
};

Twinkle.shared.callbacks = {
	main: function(pageobj) {
		var params = pageobj.getCallbackParameters();
		var pageText = pageobj.getPageText();
		var found = false;
		var text = '{{';

		for (var i = 0; i < Twinkle.shared.standardList.length; i++) {
			var tagRe = new RegExp('(\\{\\{' + Twinkle.shared.standardList[i].value + '(\\||\\}\\}))', 'im');
			if (tagRe.exec(pageText)) {
				Morebits.status.warn('Info', 'Found {{' + Twinkle.shared.standardList[i].value + '}} on the user\'s talk page already...aborting');
				found = true;
			}
		}

		if (found) {
			return;
		}

		Morebits.status.info('Info', 'Will add the shared IP address template to the top of the user\'s talk page.');
		text += params.value + '|' + params.organization;
		if (params.value === 'Shared IP edu' && params.contact !== '') {
			text += '|' + params.contact;
		}
		if (params.value !== 'Whois' && params.host !== '') {
			text += '|host=' + params.host;
		}
		text += '}}\n\n';

		var summaryText = 'Added {{[[Template:' + params.value + '|' + params.value + ']]}} template.';
		pageobj.setPageText(text + pageText);
		pageobj.setEditSummary(summaryText + Twinkle.getPref('summaryAd'));
		pageobj.setMinorEdit(Twinkle.getFriendlyPref('markSharedIPAsMinor'));
		pageobj.setCreateOption('recreate');
		pageobj.save();
	}
};

Twinkle.shared.callback.evaluate = function friendlysharedCallbackEvaluate(e) {
	var shared = e.target.getChecked('shared');
	if (!shared || shared.length <= 0) {
		alert('You must select a shared IP address template to use!');
		return;
	}

	var value = shared[0];

	if (e.target.organization.value === '') {
		alert('You must input an organization for the {{' + value + '}} template!');
		return;
	}

	var params = {
		value: value,
		organization: e.target.organization.value,
		host: e.target.host.value,
		contact: e.target.contact.value
	};

	Morebits.simpleWindow.setButtonsEnabled(false);
	Morebits.status.init(e.target);

	Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
	Morebits.wiki.actionCompleted.notice = 'Tagging complete, reloading talk page in a few seconds';

	var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), 'User talk page modification');
	wikipedia_page.setFollowRedirect(true);
	wikipedia_page.setCallbackParameters(params);
	wikipedia_page.load(Twinkle.shared.callbacks.main);
};
})(jQuery);


// </nowiki>