User:AJCham/talkback.js
Appearance
(Redirected from User:DoktorMandrake/talkback.js)
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
Documentation for this user script can be added at User:AJCham/talkback. |
// If FriendlyConfig aint exist.
if( typeof( FriendlyConfig ) == 'undefined' ) {
FriendlyConfig = {};
}
/**
FriendlyConfig.summaryAd ( string )
If ad should be added or not to summary, default [[WP:FRIENDLY|Friendly]]
*/
if( typeof( FriendlyConfig.summaryAd ) == 'undefined' ) {
FriendlyConfig.summaryAd = " using [[WP:FRIENDLY|Friendly]]";
}
/**
FriendlyConfig.markTalkbackAsMinor ( boolean )
*/
if( typeof( FriendlyConfig.markTalkbackAsMinor ) == 'undefined' ) {
FriendlyConfig.markTalkbackAsMinor = true;
}
/**
FriendlyConfig.insertHeadings ( boolean )
*/
if( typeof( FriendlyConfig.insertHeadings ) == 'undefined' ) {
FriendlyConfig.insertHeadings = true;
}
/**
FriendlyConfig.insertSignature ( boolean )
*/
if( typeof( FriendlyConfig.insertSignature ) == 'undefined' ) {
FriendlyConfig.insertSignature = true;
}
/**
FriendlyConfig.talkbackHeading ( String )
*/
if( typeof( FriendlyConfig.talkbackHeading ) == 'undefined' ) {
FriendlyConfig.talkbackHeading = 'Talkback'
}
addOnloadHook(friendlytalkback);
function friendlytalkback() {
if( wgNamespaceNumber == 3 ) {
var username = wgTitle.split( '/' )[0].replace( /\"/, "\\\""); // only first part before any slashes
addPortletLink( 'p-cactions', "javascript:friendlytalkback.callback(\"" + username + "\")", "TB", "friendly-talkback", "Easy talkback", "");
}
}
friendlytalkback.callback = function friendlytalkbackCallback( 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( "Talkback" );
var form = new QuickForm( friendlytalkback.callback.evaluate );
form.append( { type: 'radio', name: 'tbtarget',
list: [ {
label: 'My talk page',
value: 'mytalk',
checked: 'true' },
{
label: 'Other user talk page',
value: 'usertalk' },
{
label: 'Other page',
value: 'other' } ],
event: friendlytalkback.callback.change_target
} );
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.tbtarget[0].dispatchEvent( evt );
}
friendlytalkback.prev_page = '';
friendlytalkback.prev_section = '';
friendlytalkback.prev_message = '';
friendlytalkback.callback.change_target = function friendlytagCallbackChangeTarget(e) {
var value = e.target.value;
var root = e.target.form;
var old_area;
if(root.section) {
friendlytalkback.prev_section = root.section.value;
}
if(root.message) {
friendlytalkback.prev_message = root.message.value;
}
if(root.page) {
friendlytalkback.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: 'Talkback information',
name: 'work_area'
} );
switch( value ) {
default:
case 'mytalk':
work_area.append( {
type:'input',
name:'section',
label:'Linked section (optional)',
tooltip:'The section heading on your talk page where you left a message. Leave empty for no section to be linked.',
value: friendlytalkback.prev_section
} );
break;
case 'usertalk':
work_area.append( {
type:'input',
name:'page',
label:'User',
tooltip:'The username of the user on whose talk page you left a message.',
value: friendlytalkback.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: friendlytalkback.prev_section
} );
break;
case 'other':
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: friendlytalkback.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: friendlytalkback.prev_section
} );
break;
}
work_area.append( { type:'textarea', label:'Additional message (optional):', name:'message', tooltip:'An additional message that you would like to leave below the talkback 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 = friendlytalkback.prev_message;
}
friendlytalkback.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 text = '{\{User:AJCham/Talkback|';
if( self.params.tbtarget == 'usertalk' || self.params.tbtarget == 'other' ) {
text += self.params.page;
} else {
text += wgUserName;
}
if( self.params.section != '' ) {
text += '|' + self.params.section;
}
text += '|ts=\~\~\~\~\~\}\}';
if( self.params.message != '' ) {
text += '\n' + self.params.message + ' \~\~\~\~';
} else if( FriendlyConfig.insertSignature ) {
text += '\n\~\~\~\~';
}
var query = {
'action': 'edit',
'title': wgPageName,
'section': 'new',
'text': text,
'token': editToken,
'summary': FriendlyConfig.talkbackHeading,
'minor': FriendlyConfig.markTalkbackAsMinor ? 1 : undefined
};
var wikipedia_api = new Wikipedia.api( 'Edit token grabbed; adding talkback notification to user talk page...', query, null, self.statelem );
wikipedia_api.post();
}
}
friendlytalkback.callback.evaluate = function friendlytalkbackCallbackEvaluate(e) {
var tbtarget = e.target.getChecked( 'tbtarget' )[0];
var page = null;
var section = e.target.section.value;
if( tbtarget == 'usertalk' || tbtarget == 'other' ) {
page = e.target.page.value;
if( tbtarget == '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 = {
tbtarget: tbtarget,
page: page,
section: section,
message: e.target.message.value
};
Status.init( e.target );
Wikipedia.actionCompleted.redirect = wgPageName;
Wikipedia.actionCompleted.notice = "Talkback notification 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, friendlytalkback.callbacks.main );
wikipedia_api.params = params;
wikipedia_api.post();
}