addOnloadHook(discussioninvite);
function discussioninvite() {
if( wgNamespaceNumber == 3 ) {
var username = wgTitle.split( '/' )[0].replace( /\"/, "\\\""); // only first part before any slashes
mw.util.addPortletLink( 'p-discussion', "javascript:discussioninvite.callback(\"" + username + "\")", "Inv", "discussion-invite", "Easy invitation", "");
}
}
/**
discussioninvite.callback = function discussioninviteCallback( uid ) {
if( uid == wgUserName ){
alert( 'Is it really so bad that you\'re talking back to yourself?' );
return;
}
var Window = new SimpleWindow( 600, 350 );
Window.setTitle( "Discussion Invite" );
var form = new QuickForm( discussioninvite.callback.evaluate );
invitetarget = other;
form.append( {
type: 'field',
label: 'Work area',
name: 'work_area'
} );
var result = form.render();
Window.setContent( result );
Window.display();
// We must init the
var evt = document.createEvent( "Event" );
evt.initEvent( 'change', true, true );
result.invitetarget[0].dispatchEvent( evt );
}
discussioninvite.prev_page = '';
discussioninvite.prev_section = '';
discussioninvite.prev_message = '';
discussioninvite.callback.change_target = function friendlytagCallbackChangeTarget(e) {
var value = e.target.value;
var root = e.target.form;
var old_area;
if(root.section) {
discussioninvite.prev_section = root.section.value;
}
if(root.message) {
discussioninvite.prev_message = root.message.value;
}
if(root.page) {
discussioninvite.prev_page = root.page.value;
}
for( var i = 0; i < root.childNodes.length; ++i ) {
var node = root.childNodes[i];
if(
node instanceof Element &&
node.getAttribute( 'name' ) == 'work_area'
) {
old_area = node;
break;
}
}
var work_area = new QuickForm.element( {
type: 'field',
label: 'Invite information',
name: 'work_area'
} );
work_area.append( {
type:'input',
name:'page',
label:'Full page name',
tooltip:'The full page name where you left the message. For example: "Wikipedia talk:Friendly".',
value: discussioninvite.prev_page
} );
work_area.append( {
type:'input',
name:'section',
label:'Linked section (optional)',
tooltip:'The section heading on the page where you left a message. Leave empty for no section to be linked.',
value: discussioninvite.prev_section
} );
work_area.append( { type:'textarea', label:'Additional message (optional):', name:'message', tooltip:'An additional message that you would like to leave below the ' template. Your signature will be added to the end of the message if you leave one.' } );
work_area.append( { type:'submit' } );
work_area = work_area.render();
old_area.parentNode.replaceChild( work_area, old_area );
root.message.value = discussioninvite.prev_message;
}
discussioninvite.callbacks = {
main: function( self ) {
self.statelem.status( 'Grabbing edit token...' );
var xmlDoc = self.responseXML;
var editToken = xmlDoc.evaluate( '//page/@edittoken', xmlDoc, null, XPathResult.STRING_TYPE, null ).stringValue;
var invitePageName = (self.params.invitetarget == 'mytalk')?wgUserName:self.params.page;
//clean talkback heading: strip section header markers, were erroneously suggested in the documentation
var text = '\n==' + DiscussionInviteConfig.inviteHeading.replace(/^\s*=+\s*(.*?)\s*=+$\s*/, "$1") + '==\n{\{subst:User:EdoDodo/Invite|';
text += invitePageName;
if( self.params.section != '' ) {
text += '|' + self.params.section;
}
text += '|ts=\~\~\~\~\~\}\}';
if( self.params.message != '' ) {
text += self.params.message;
}
text += '\~\~\~\~';
var query = {
'action': 'edit',
'title': wgPageName,
'appendtext': text,
'token': editToken,
'summary': 'Discussion invitation ([\['+ (self.params.invitetarget == 'other'?'':'User:') + invitePageName + (self.params.section?('#'+self.params.section):'') +']])',
'minor': DiscussionInviteConfig.markInviteAsMinor ? 1 : undefined
};
var wikipedia_api = new Wikipedia.api( 'Edit token grabbed; adding discussion invitation to user talk page...', query, null, self.statelem );
wikipedia_api.post();
}
}
discussioninvite.callback.evaluate = function discussioninviteCallbackEvaluate(e) {
var invitetarget = e.target.getChecked( 'invitetarget' )[0];
var page = null;
var section = e.target.section.value;
if( invitetarget == 'usertalk' || invitetarget == 'other' ) {
page = e.target.page.value;
if( invitetarget == 'usertalk' ) {
if( page == '' ) {
alert( 'You must specify the username of the user whose talk page you left a message on' );
return;
}
} else {
if( page == '' ) {
alert( 'You must specify the full page name when your message is not on a user talk page' );
return;
}
}
}
var params = {
invitetarget: invitetarget,
page: page,
section: section,
message: e.target.message.value
};
Status.init( e.target );
Wikipedia.actionCompleted.redirect = wgPageName;
Wikipedia.actionCompleted.notice = "Discussion invitation complete; reloading talk page in a few seconds";
var query = {
'action': 'query',
'prop': 'info',
'intoken': 'edit',
'titles': wgPageName
};
var wikipedia_api = new Wikipedia.api( 'Status', query, discussioninvite.callbacks.main );
wikipedia_api.params = params;
wikipedia_api.post();
}
**/