MediaWiki:Gadget-friendlyshared.js: Difference between revisions

Repo at ab124a59: Don't show for IP ranges
m (1 revision)
 
imported>Amorymeltzer
(Repo at ab124a59: Don't show for IP ranges)
 
(7 intermediate revisions by 2 users not shown)
Line 1: Line 1:
//<nowiki>
// <nowiki>




(function($){
(function($) {




Line 10: Line 10:
  ****************************************
  ****************************************
  * Mode of invocation:    Tab ("Shared")
  * Mode of invocation:    Tab ("Shared")
  * Active on:              Existing IP user talk pages
  * Active on:              IP user talk pages
* Config directives in:  FriendlyConfig
  */
  */


Twinkle.shared = function friendlyshared() {
Twinkle.shared = function friendlyshared() {
if( mw.config.get('wgNamespaceNumber') === 3 && Morebits.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( uid ) {
Twinkle.shared.callback = function friendlysharedCallback() {
var Window = new Morebits.simpleWindow( 600, 400 );
var Window = new Morebits.simpleWindow(600, 450);
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('Shared prefs', 'WP:TW/PREF#shared');
Window.addFooterLink('Twinkle help', 'WP:TW/DOC#shared');
Window.addFooterLink('Give feedback', 'WT:TW');


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


var div = form.append( { type: 'div', id: 'sharedip-templatelist' } );
var div = form.append({
div.append( { type: 'header', label: 'Shared IP address templates' } );
type: 'div',
div.append( { type: 'radio', name: 'shared', list: Twinkle.shared.standardList,
id: 'sharedip-templatelist',
event: function( e ) {
className: 'morebits-scrollbox'
Twinkle.shared.callback.change_shared( e );
}
);
div.append({ type: 'header', label: 'Shared IP address templates' });
div.append({ type: 'radio', name: 'template', list: Twinkle.shared.standardList,
event: function(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' } );
var previewlink = document.createElement('a');
$(previewlink).click(function() {
Twinkle.shared.preview(result);
});
previewlink.style.cursor = 'pointer';
previewlink.textContent = 'Preview';
form.append({ type: 'div', id: 'sharedpreview', label: [ previewlink ] });
form.append({ type: 'submit' });


var result = form.render();
var result = form.render();
Window.setContent( result );
Window.setContent(result);
Window.display();
Window.display();
$(result).find('div#sharedip-templatelist').addClass('quickform-scrollbox');
};
};


Line 79: Line 92:
tooltip: 'IP user talk page template that shows helpful information to IP users and those wishing to warn, block or ban them'
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',
label: '{{Shared IP edu}}: shared IP address template modified for educational institutions',
value: 'Shared IP edu'
value: 'Shared IP edu'
Line 118: Line 131:


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();
var found = false;
var found = false;
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;
var text = Twinkle.shared.getTemplateWikitext(params);
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.';
var summaryText = 'Added {{[[Template:' + params.template + '|' + params.template + ']]}} template.';
pageobj.setPageText(text + pageText);
pageobj.setPageText(text + pageText);
pageobj.setEditSummary(summaryText + Twinkle.getPref('summaryAd'));
pageobj.setEditSummary(summaryText);
pageobj.setMinorEdit(Twinkle.getFriendlyPref('markSharedIPAsMinor'));
pageobj.setChangeTags(Twinkle.changeTags);
pageobj.setMinorEdit(Twinkle.getPref('markSharedIPAsMinor'));
pageobj.setCreateOption('recreate');
pageobj.setCreateOption('recreate');
pageobj.save();
pageobj.save();
}
}
};
Twinkle.shared.preview = function(form) {
var input = Morebits.quickForm.getInputData(form);
if (input.template) {
var previewDialog = new Morebits.simpleWindow(700, 500);
previewDialog.setTitle('Shared IP template preview');
previewDialog.setScriptName('Add Shared IP template');
previewDialog.setModality(true);
var previewdiv = document.createElement('div');
previewdiv.style.marginLeft = previewdiv.style.marginRight = '0.5em';
previewdiv.style.fontSize = 'small';
previewDialog.setContent(previewdiv);
var previewer = new Morebits.wiki.preview(previewdiv);
previewer.beginRender(Twinkle.shared.getTemplateWikitext(input), mw.config.get('wgPageName'));
var submit = document.createElement('input');
submit.setAttribute('type', 'submit');
submit.setAttribute('value', 'Close');
previewDialog.addContent(submit);
previewDialog.display();
$(submit).click(function() {
previewDialog.close();
});
}
};
Twinkle.shared.getTemplateWikitext = function(input) {
var text = '{{' + input.template + '|' + input.organization;
if (input.contact) {
text += '|' + input.contact;
}
if (input.host) {
text += '|host=' + input.host;
}
text += '}}\n\n';
return text;
};
};


Twinkle.shared.callback.evaluate = function friendlysharedCallbackEvaluate(e) {
Twinkle.shared.callback.evaluate = function friendlysharedCallbackEvaluate(e) {
var shared = e.target.getChecked( 'shared' );
var params = Morebits.quickForm.getInputData(e.target);
if( !shared || shared.length <= 0 ) {
if (!params.template) {
alert( 'You must select a shared IP address template to use!' );
alert('You must select a shared IP address template to use!');
return;
return;
}
}
 
if (!params.organization) {
var value = shared[0];
alert('You must input an organization for the {{' + params.template + '}} template!');
 
if( e.target.organization.value === '') {
alert( 'You must input an organization for the {{' + value + '}} template!' );
return;
return;
}
}


var params = {
Morebits.simpleWindow.setButtonsEnabled(false);
value: value,
Morebits.status.init(e.target);
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.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);
wikipedia_page.load(Twinkle.shared.callbacks.main);
wikipedia_page.load(Twinkle.shared.callbacks.main);
};
};
Twinkle.addInitCallback(Twinkle.shared, 'shared');
})(jQuery);
})(jQuery);




//</nowiki>
// </nowiki>
Anonymous user