User:Sross (Public Policy)/ambassadorwikilove.js
Appearance
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:Sross (Public Policy)/ambassadorwikilove. |
//<nowiki>
// code prevented from executing due to [[phab:T72470]]
if (false) {
// Script depends on jQuery dialog widget
mw.loader.using( 'jquery.ui', function() {
// Construct object (to prevent namespace conflicts)
wikiLove = {
displayProgress: function( form, message ) {
$('#'+form+' div').hide(); // remove everything else from the dialog box
$('#'+form).append ( $('<div style="text-align:center;margin:3em 0;"></div>').html( message+'<br/><img src="http://upload.wikimedia.org/wikipedia/commons/4/42/Loading.gif" />' ) );
},
displayError: function( form, error ) {
$('#'+form+' div').hide(); // remove everything else from the dialog box
$('#'+form).append ( $('<div style="color:#990000;margin-top:0.4em;"></div>').html( 'Error: '+error ) );
},
getEditToken: function() {
$.ajax({
url: wgScriptPath + '/api.php?',
data: 'action=query&prop=info&intoken=edit&titles=Main%20Page&indexpageids&format=json',
dataType: 'json',
success: function( data ) {
if ( data.query.pages && data.query.pageids ) {
var pageid = data.query.pageids[0];
wikiLove.editToken = data.query.pages[pageid].edittoken;
}
}
});
},
getEmailable: function() {
// Test to see if the 'E-mail this user' link exists
wikiLove.emailable = $('#t-emailuser').length ? true : false;
},
editPage: function( form, summary, template ) {
$.ajax({
url: wgScriptPath + '/api.php?',
data: 'action=edit&title='+encodeURIComponent(mw.config.get('wgPageName'))+'§ion=new&summary='+encodeURIComponent(summary)+'&text='+encodeURIComponent(template)+'&format=json&token='+encodeURIComponent(wikiLove.editToken),
dataType: 'json',
type: 'POST',
success: function( data ) {
if ( data.edit.result == "Success" ) {
window.location.reload();
} else {
wikiLove.displayError( form, 'Unknown result from API.' );
}
},
error: function( xhr ) {
wikiLove.displayError( form, 'Edit failed.' );
//console.debug( xhr.responseText );
}
});
},
sendEmail: function( form, subject, text ) {
$.ajax({
url: wgScriptPath + '/api.php?',
data: 'action=emailuser&target='+encodeURIComponent(wgTitle)+'&subject='+encodeURIComponent(subject)+'&text='+encodeURIComponent(text)+'&format=json&token='+encodeURIComponent(wikiLove.editToken),
dataType: 'json',
type: 'POST'
});
},
launchDialog: function( interface, emailOption ) {
// If user is emailable, add email checkbox to forms that request it
if ( emailOption && typeof wikiLove.emailable !== 'undefined' && wikiLove.emailable ) {
if ( typeof interface.data('emailCheckboxAppended') == 'undefined' ) {
interface.append( $('<div style="margin-top:0.4em;"></div>').html('<input type="checkbox" name="notify"/> Notify user by email') );
interface.data('emailCheckboxAppended', true);
}
}
// Open the dialog box
interface.dialog('open');
// Retrieve the edit token so it will be available when the form is submitted
wikiLove.getEditToken();
},
initialize: function() {
// Function to make a list of images selectable
$.fn.selectItem = function() {
return this.each(function() {
var containerId = this.id;
var customId = 0;
$('#'+containerId+' img').css('border', '8px solid transparent');
$('#'+containerId+' img').each(function() {
if (this.id == '') {
this.id = 'select_img_' + customId;
customId++;
}
$('#'+this.id).click(function() {
$('#'+containerId+'Selected').val(this.title);
$('#'+containerId+' img').css('border', '8px solid transparent');
$('#'+this.id).css('border', '8px solid #AED0EA');
})
});
});
};
// List of all available awards
var $awardList = [
'The Original Barnstar',
'Wikipedia Ambassador Barnstar',
'The WikiPen'
];
// Define award interface
$wlAwards = $('<div id="awardForm" style="position:relative;"></div>')
.append( $('<div style="margin-top:0.4em;"></div>').html( 'Select award: ' ).append( $('<select id="awardSelect" style="padding:1px;vertical-align:baseline;"></select>') ) )
.append( $('<div style="margin-top:0.4em;"></div>').html( 'Enter a message (without a signature):<br/>' ).append( $('<textarea name="message" id="awardMessage" style="width:99%" rows="4" cols="60"></textarea>') ) )
.dialog({
width: 500,
autoOpen: false,
title: 'Give an award',
modal: true,
buttons: { "Give award": function() {
$(this).dialog({buttons:{}});
if ( typeof wikiLove.editToken !== 'undefined' ) {
if ( $('#awardForm input[name="notify"]').attr('checked') ) {
// Send email
wikiLove.sendEmail( 'awardForm', 'You\'ve been given an award on Wikipedia!', 'Hello '+wgTitle+'!\n\nI just gave you an award on your English Wikipedia talk page.' );
}
// Perform edit to page
wikiLove.displayProgress( 'awardForm', 'Adding award to page...' );
var template = '{{subst:'+$('#awardSelect').val()+'|'+$('#awardMessage').val() +' ~~~~}}';
wikiLove.editPage( 'awardForm', 'Award', template );
} else {
wikiLove.displayError( 'awardForm', 'Could not retrieve edit token.' );
}
}}
});
// Populate award selection list
$.each( $awardList, function(index, value) { $('#awardSelect').append( $('<option></option>').val(value).html(value) ); });
// List of message types
var $messageList = [
'Just a message',
'Ambassador welcome',
];
// Define message interface
$wlMessage = $('<div id="messageForm" style="position:relative;"></div>')
.append( $('<div style="margin-top:0.4em;"></div>').html( 'Select message or template: ' ).append( $('<select id="messageSelect" style="padding:1px;vertical-align:baseline;"></select>') ) )
.append( $('<div style="margin-top:0.4em;"></div>').html( 'Enter a message (without a signature), or leave blank for welcome template:<br/>' ).append( $('<textarea name="message" id="messageMessage" style="width:99%" rows="4" cols="60"></textarea>') ) )
.dialog({
width: 500,
autoOpen: false,
title: 'Leave a message',
modal: true,
buttons: { "Leave message": function() {
$(this).dialog({buttons:{}});
if ( typeof wikiLove.editToken !== 'undefined' ) {
if ( $('#messageForm input[name="notify"]').attr('checked') ) {
// Send email
wikiLove.sendEmail( 'messageForm', 'You\'ve got a message from your Wikipedia mentor!', 'Hello '+wgTitle+'!\n\nI just left you a message on your English Wikipedia talk page.' );
}
// Perform edit to page
wikiLove.displayProgress( 'messageForm', 'Leaving your message...' );
var template = '{{subst:'+$('#messageSelect').val()+'|'+$('#messageMessage').val() +' ~~~~}}';
wikiLove.editPage( 'messageForm', 'Message', template );
} else {
wikiLove.displayError( 'messageForm', 'Could not retrieve edit token.' );
}
}}
});
// Populate award selection list
$.each( $messageList, function(index, value) { $('#messageSelect').append( $('<option></option>').val(value).html(value) ); });
// Insert new tab into page
var menuMessage = '<li id="wl-message"><span><a onclick="wikiLove.launchDialog( $wlMessage, true ); return false;" href="#">Message</a></span></li>';
var menuAward = '<li id="wl-award"><span><a onclick="wikiLove.launchDialog( $wlAwards, true ); return false;" href="#">Award</a></span></li>';
var wikiLoveMenu = '<div class="vectorMenu" id="p-wikilove"><h5><span>WikiLove</span><a href="#" style="padding:0 0.4em;width:auto;"><span style="display:inline-block;height:2.5em;width:16px;margin-right:14px;background-position:0 60%;background-image:url(http://upload.wikimedia.org/wikipedia/commons/thumb/4/42/Wikipedia-Ambassador-Program-Logo.png/16px-Wikipedia-Ambassador-Program-Logo.png);background-repeat:no-repeat;"> </span></a></h5><div class="menu"><ul>'+menuMessage+menuAward+'</ul></div></div>';
$('#p-cactions').after(wikiLoveMenu);
} // close initialize function
} // close wikiLove object
wikiLove.initialize();
wikiLove.getEmailable();
}) // close mw.loader
} // close if
//</nowiki>