User:Alanl/mergeHelper2.js
Appearance
(Redirected from User:Alanl/afchelper4.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:Alanl/mergeHelper2. |
////////////////////////////////////////////
//
// Yet another AfC helper script
// v.4.1.0
// Adapted from [[User:Mr.Z-man/closeAFD]]
//
////////////////////////////////////////////
if (wgPageName.indexOf('Wikipedia:Articles_for_creation/Redirects') != -1) {
var mergeHelper_RedirectPageName = wgPageName.replace(/_/g, ' ');
var mergeHelper_RedirectSubmissions = new Array();
var mergeHelper_RedirectSections = new Array();
var mergeHelper_numTotal = 0;
var mergeHelper_Redirect_AJAXnumber = 0;
var mergeHelper_Submissions = new Array();
var mergeHelper_redirectDecline_reasonhash = {
'exists' : 'The title you suggested already exists on Wikipedia',
'blank' : 'We cannot accept empty submissions',
'notarget': ' A redirect cannot be created unless the target is an existing article. Either you have not specified the target, or the target does not exist',
'unlikely': 'The title you suggested seems unlikely. Could you provide a source showing that it is a commonly used alternate name?',
'notredirect': 'This request is not a redirect request',
'custom': ''
};
var mergeHelper_categoryDecline_reasonhash = {
'exists' : 'The category you suggested already exists on Wikipedia',
'blank' : 'We cannot accept empty submissions',
'unlikely': 'It seems unlikely that there are enough pages to support this category',
'notcategory':'This request is not a category request',
'custom': ''
};
function mergeHelper_redirect_init(){
mergeHelper_RedirectSubmissions = new Array();
mergeHelper_RedirectSections = new Array();
mergeHelper_numTotal = 0;
var pagetext = mergeHelper_redirect_getPageText(mergeHelper_RedirectPageName, false);
// let the parsing begin.
// first, strip out the parts before the first section.
var section_re = /==[^=]*==/;
pagetext = pagetext.substring(pagetext.search(section_re));
// second, strip out the parts that has been mass-moderated.
// first find the place of mass moderation
var mass_re = /\{\{(?:(?:afc-c|afc top)\|\s*m|afc mm)/i;
if(mass_re.test(pagetext)){
var mass_mods = mass_re.exec(pagetext);
for(var i = 0; i < mass_mods.length; i++){
var mass_mod_start = pagetext.indexOf(mass_mods[i]);
var mass_mod_end = pagetext.substring(mass_mod_start).search(/\{\{(?:afc-c\|\s*b|afc b)/i);
mass_mod_end += mass_mod_start;
mass_mod_end = pagetext.indexOf('\}\}', mass_mod_end);
pagetext = pagetext.substring(0, mass_mod_start) + pagetext.substring(mass_mod_end + 2);
}
}
// now parse it into sections.
section_re = /==[^=]*==/g;
var section_headers = pagetext.match(section_re);
for(var i = 0; i < section_headers.length; i++){
var section_start = pagetext.indexOf(section_headers[i]);
var section_text = pagetext.substring(section_start);
if(i < section_headers.length-1){
var section_end = section_text.substring(section_headers[i].length).indexOf(section_headers[i+1]) + section_headers[i].length;
section_text = section_text.substring(0, section_end);
}
mergeHelper_RedirectSections.push(section_text);
}
// parse the sections.
for(var i = 0; i < mergeHelper_RedirectSections.length; i++){
var closed = /\{\{\s*afc(?!\s+comment)/i.test(mergeHelper_RedirectSections[i]);
if(!closed){
// parse.
var header = mergeHelper_RedirectSections[i].match(section_re)[0];
if(header.search(/Redirect request/i) != -1){
var wikilink_re = /\[\[[^\[\]]+\]\]/g;
var links = header.match(wikilink_re);
if(!links) continue;
for(var j = 0; j < links.length; j++){
links[j]=links[j].replace(/[\[\]]/g, '');
if(links[j].charAt(0) == ':')
links[j] = links[j].substring(1);
}
var re = /Target of redirect:\s*\[\[([^\[\]]*)\]\]/i;
re.test(mergeHelper_RedirectSections[i]);
var to = RegExp.$1;
var submission = {
type: 'redirect',
from: new Array(),
section: i,
to: to,
title: to
};
for(var j = 0; j < links.length; j++){
var sub = {
type: 'redirect',
to: to,
id: mergeHelper_numTotal,
title: links[j],
action: ''
};
submission.from.push(sub);
mergeHelper_Submissions.push(sub);
mergeHelper_numTotal++;
}
mergeHelper_RedirectSubmissions.push(submission);
}
else if(header.search(/Category request/i) != -1){
var wikilink_re = /\[\[[^\[\]]+\]\]/g;
var links = header.match(wikilink_re);
if(!links) continue;
// figure out the parent category.
var idx = mergeHelper_RedirectSections[i].substring(header.length).search(/\[\[\s*:\s*(Category:[^\]\[]*)\]\]/i);
var parent = '';
if(idx != -1)
parent = RegExp.$1;
parent = parent.replace(/:\s*/g, ':');
for(var j = 0; j < links.length; j++){
links[j]=links[j].replace(/[\[\]]/g, '');
links[j]=links[j].replace(/Category\s*:\s*/gi, 'Category:');
if(links[j].charAt(0) == ':')
links[j] = links[j].substring(1);
var submission = {
type: 'category',
title: links[j],
section: i,
id: mergeHelper_numTotal,
action: '',
parent: parent
};
mergeHelper_numTotal++;
mergeHelper_RedirectSubmissions.push(submission);
mergeHelper_Submissions.push(submission);
}
}
}
}
var text = '<h3>Reviewing AFC redirect requests</h3>';
// now layout the text.
for(var k = 0; k < mergeHelper_RedirectSubmissions.length; k++){
text += '<ul>';
if(mergeHelper_RedirectSubmissions[k].type == 'redirect'){
text += '<li>Redirect(s) to <a href="' + wgArticlePath.replace("$1", encodeURIComponent(mergeHelper_RedirectSubmissions[k].to))
+ '">' + mergeHelper_RedirectSubmissions[k].to + '</a>: <ul>';
for(var l = 0; l < mergeHelper_RedirectSubmissions[k].from.length; l++){
var from = mergeHelper_RedirectSubmissions[k].from[l];
text += "<li>From: " + from.title
+'<br/><label for="mergeHelper_redirect_action_'+ from.id+'">Action: </label>'
+ mergeHelper_redirect_generateSelect('mergeHelper_redirect_action_'+ from.id,
[{ label: 'Accept', value: 'accept' },
{ label: 'Decline', value: 'decline' },
{ label: 'Comment', value: 'comment' },
{ label: 'None', selected : true, value: 'none' }
], 'mergeHelper_redirect_onActionChange(' + from.id + ')')
+ '<div id="mergeHelper_redirect_extra_' + from.id + '"></div></li>';
}
text += '</ul></li>';
}
else{
text += '<li>Category submission: '+ mergeHelper_RedirectSubmissions[k].title;
text += '<br/> <label for="mergeHelper_redirect_action_'+ mergeHelper_RedirectSubmissions[k].id+'">Action: </label>'
+ mergeHelper_redirect_generateSelect('mergeHelper_redirect_action_'+ mergeHelper_RedirectSubmissions[k].id,
[{ label: 'Accept', value: 'accept' },
{ label: 'Decline', value: 'decline' },
{ label: 'Comment', value: 'comment' },
{ label: 'None', selected : true, value: 'none' }
], 'mergeHelper_redirect_onActionChange(' + mergeHelper_RedirectSubmissions[k].id + ')')
+ '<div id="mergeHelper_redirect_extra_' + mergeHelper_RedirectSubmissions[k].id + '"></div></li>';
}
text += '</ul>';
}
text += '<input type="button" id="mergeHelper_redirect_done_button" name="mergeHelper_redirect_done_button" value="Done" onclick="mergeHelper_redirect_performActions()" />';
jsMsg(text);
}
function mergeHelper_redirect_onActionChange(id){
var extra = document.getElementById("mergeHelper_redirect_extra_" + id);
var selectValue = document.getElementById("mergeHelper_redirect_action_"+id).value;
if(selectValue == 'none')
extra.innerHTML = '';
else if(selectValue == 'accept'){
if(mergeHelper_Submissions[id].type == 'redirect'){
extra.innerHTML = '<label for="mergeHelper_redirect_from_' + id + '">From: </label><input type="text" '+
'name="mergeHelper_redirect_from_' + id + '" id="mergeHelper_redirect_from_' + id + '" value="'
+ mergeHelper_Submissions[id].title + '" />';
extra.innerHTML += ' <label for="mergeHelper_redirect_to_' + id + '">To: </label><input type="text" '+
'name="mergeHelper_redirect_to_' + id + '" id="mergeHelper_redirect_to_' + id + '" value="'
+ mergeHelper_Submissions[id].to + '" />';
extra.innerHTML += '<label for="mergeHelper_redirect_append_'+ id +'">Template to append: </label>'
+ mergeHelper_redirect_generateSelect('mergeHelper_redirect_append_'+
id, [
{ label: 'R from alternative name', value: 'R from alternative name' },
{ label: 'R from alternative language', value: 'R from alternative language' },
{ label: 'R from alternative spelling', value: 'R from alternative spelling' },
{ label: 'R to section', value: 'R to section' },
{ label: 'R to disambiguation page', value: 'R to disambiguation page' },
{ label: 'R from title with diacritics', value: 'R from title with diacritics'},
{ label: 'Custom - prompt me', value: 'custom' },
{ label: 'None', selected : true, value: 'none' }
]);
}
else{
extra.innerHTML = '<label for="mergeHelper_redirect_name_' + id + '">name: </label><input type="text" '+
'name="mergeHelper_redirect_name_' + id + '" id="mergeHelper_redirect_name_' + id + '" value="'
+ mergeHelper_Submissions[id].title + '" />';
extra.innerHTML += '<label for="mergeHelper_redirect_parent_' + id +'">Parent category:</label>'
+ '<input type="text" id="mergeHelper_redirect_parent_' + id +'" name="mergeHelper_redirect_parent_' + id +
'" value="' + mergeHelper_Submissions[id].parent + '" />';
}
extra.innerHTML += '<label for="mergeHelper_redirect_comment_' + id +'">Comment:</label>'
+ '<input type="text" id="mergeHelper_redirect_comment_' + id +'" name="mergeHelper_redirect_comment_' + id +'"/>';
} else if(selectValue == 'decline'){
if(mergeHelper_Submissions[id].type == 'redirect'){
extra.innerHTML = '<label for="mergeHelper_redirect_decline_'+ id +'">Reason for decline: </label>'
+ mergeHelper_redirect_generateSelect('mergeHelper_redirect_decline_'+
id, [
{ label: 'Already exists', value: 'exists' },
{ label: 'Blank request', value: 'blank' },
{ label: 'No valid target specified', value: 'notarget' },
{ label: 'Unlikely search term', value: 'unlikely' },
{ label: 'Not a redirect request', value: 'notredirect' },
{ label: 'Custom - reason below', selected : true, value: 'custom' }
]);
}
else {
extra.innerHTML = '<label for="mergeHelper_redirect_decline_'+ id +'">Reason for decline: </label>'
+ mergeHelper_redirect_generateSelect('mergeHelper_redirect_decline_'+
id, [
{ label: 'Already exists', value: 'exists' },
{ label: 'Blank request', value: 'blank' },
{ label: 'Unlikely category', value: 'unlikely' },
{ label: 'Not a category request', value: 'notcategory' },
{ label: 'Custom - reason below', selected : true, value: 'custom' }
]);
}
extra.innerHTML += '<label for="mergeHelper_redirect_comment_' + id +'">Comment:</label>'
+ '<input type="text" id="mergeHelper_redirect_comment_' + id +'" name="mergeHelper_redirect_comment_' + id +'"/>';
} else{
extra.innerHTML = '<label for="mergeHelper_redirect_comment_' + id +'">Comment:</label>'
+ '<input type="text" id="mergeHelper_redirect_comment_' + id +'" name="mergeHelper_redirect_comment_' + id +'"/>';
}
}
function mergeHelper_redirect_performActions(){
// Load all of the data.
for(var i = 0; i < mergeHelper_Submissions.length; i++){
var action = document.getElementById("mergeHelper_redirect_action_" + i).value;
mergeHelper_Submissions[i].action = action;
if(action == 'none')
continue;
if(action == 'accept'){
if(mergeHelper_Submissions[i].type == 'redirect'){
mergeHelper_Submissions[i].title = document.getElementById("mergeHelper_redirect_from_" + i).value;
mergeHelper_Submissions[i].to = document.getElementById("mergeHelper_redirect_to_" + i).value;
mergeHelper_Submissions[i].append = document.getElementById("mergeHelper_redirect_append_" + i).value;
if(mergeHelper_Submissions[i].append == 'custom'){
mergeHelper_Submissions[i].append = prompt("Please enter the template to append for " + mergeHelper_Submissions[i].title
+ ". Do not include the curly brackets.");
}
if(mergeHelper_Submissions[i].append == 'none' || mergeHelper_Submissions[i].append == null)
mergeHelper_Submissions[i].append = '';
else
mergeHelper_Submissions[i].append = '\{\{' + mergeHelper_Submissions[i].append + '\}\}';
}
else{
mergeHelper_Submissions[i].title = document.getElementById("mergeHelper_redirect_name_" + i).value;
mergeHelper_Submissions[i].parent = document.getElementById("mergeHelper_redirect_parent_" + i).value;
}
}
else if (action == 'decline'){
mergeHelper_Submissions[i].reason = document.getElementById('mergeHelper_redirect_decline_' + i).value;
}
mergeHelper_Submissions[i].comment = document.getElementById("mergeHelper_redirect_comment_" + i).value;
}
// Data loaded. Show progress screen and get edit token and WP:AFC/R page text.
jsMsg('<ul id="mergeHelper_status"></ul><ul id="mergeHelper_finish"></ul>');
document.getElementById('mergeHelper_finish').innerHTML += '<span id="mergeHelper_finished_wrapper"><span id="mergeHelper_finished_main" style="display:none"><li id="mergeHelper_done"><b>Done (<a href="'+ wgArticlePath.replace("$1", encodeURI(mergeHelper_RedirectPageName))+'?action=purge" title="'+mergeHelper_RedirectPageName+'">Reload page</a>)</b></li></span></span>';
var token = mergeHelper_redirect_getToken(true);
var pagetext = mergeHelper_redirect_getPageText(mergeHelper_RedirectPageName, true);
var totalaccept = 0;
var totaldecline = 0;
var totalcomment = 0;
// traverse the submissions and locate the relevant sections.
for(var i = 0; i < mergeHelper_RedirectSubmissions.length; i++){
var sub = mergeHelper_RedirectSubmissions[i];
if(pagetext.indexOf(mergeHelper_RedirectSections[sub.section]) == -1){
// Someone has modified the section in the mean time. Skip.
document.getElementById('mergeHelper_status').innerHTML += '<li>Skipping ' + sub.title + ': Cannot find section. Perhaps it was modified in the mean time?</li>';
continue;
}
var text = mergeHelper_RedirectSections[sub.section];
var startindex = pagetext.indexOf(mergeHelper_RedirectSections[sub.section]);
var endindex = startindex + text.length;
// First deal with cats. These are easy.
if(sub.type == 'category'){
if(sub.action == 'accept'){
var cattext = '<!--Created by WP:AFC -->';
if(sub.parent != '' )
cattext = '\[\['+ sub.parent + '\]\]';
mergeHelper_redirect_editPage(sub.title, cattext, token, 'Created via \[\[WP:AFC|Articles for Creation\]\] (\[\[WP:WPAFC|you can help!\]\])', true);
var talktext = '\{\{subst:WPAFC/article|class=Cat\}\}';
var talktitle = sub.title.replace(/Category:/gi, 'Category talk:');
mergeHelper_redirect_editPage(talktitle, talktext, token, 'Placing WPAFC project banner', true);
var header = text.match(/==[^=]*==/)[0];
text = header + "\n\{\{AfC-c|a\}\}\n" + text.substring(header.length);
if(sub.comment != '')
text += '\n*\{\{subst:afc category|accept|2=' + sub.comment +'\}\} \~\~\~\~\n';
else
text += '\n*\{\{subst:afc category\}\} \~\~\~\~\n';
text += '\{\{AfC-c|b\}\}\n';
totalaccept ++;
}
else if (sub.action == 'decline'){
var header = text.match(/==[^=]*==/)[0];
var reason = mergeHelper_categoryDecline_reasonhash[sub.reason];
if(reason == '')
reason = sub.comment;
else if (sub.comment != '')
reason = reason + ': ' + sub.comment;
if(reason == ''){
document.getElementById('mergeHelper_status').innerHTML += '<li>Skipping ' + sub.title + ': No decline reason specified.</li>';
continue;
}
text = header + "\n\{\{AfC-c|d\}\}\n" + text.substring(header.length);
if(sub.comment == '')
text += '\n*\{\{subst:afc category|' + sub.reason +'\}\} \~\~\~\~\n';
else
text += '\n*\{\{subst:afc category|decline|2=' + reason +'\}\} \~\~\~\~\n';
text += '\{\{AfC-c|b\}\}\n';
totaldecline++;
}
else if (sub.action == 'comment'){
if(sub.comment != '')
text += '\n*\{\{afc comment|1=' + sub.comment +'\~\~\~\~\}\}\n';
totalcomment++;
}
}
else {
// redirects......
var acceptcomment = '';
var declinecomment = '';
var othercomment = '';
var acceptcount = 0, declinecount = 0, commentcount = 0, hascomment = false;
for(var j = 0; j < sub.from.length; j++){
var redirect = sub.from[j];
if(redirect.action == 'accept'){
var redirecttext = '#REDIRECT \[\[' + redirect.to + '\]\]\n' + redirect.append;;
mergeHelper_redirect_editPage(redirect.title, redirecttext, token, 'Created via \[\[WP:AFC|Articles for Creation\]\] (\[\[WP:WPAFC|you can help!\]\])', true);
var talktext = '\{\{subst:WPAFC/redirect\}\}';
var talktitle = 'Talk:' + redirect.title;
mergeHelper_redirect_editPage(talktitle, talktext, token, 'Placing WPAFC project banner', true);
acceptcomment += redirect.title + " → " + redirect.to;
if(redirect.comment != ''){
acceptcomment += ': ' + redirect.comment + '; ';
hascomment = true;
} else
acceptcomment += '; ';
acceptcount ++;
}
else if (redirect.action == 'decline'){
var reason = mergeHelper_redirectDecline_reasonhash[redirect.reason];
if(reason == '')
reason = redirect.comment;
else if (redirect.comment != '')
reason = reason + ': ' + redirect.comment;
if(reason == ''){
document.getElementById('mergeHelper_status').innerHTML += '<li>Skipping ' + redirect.title + ': No decline reason specified.</li>';
continue;
}
declinecomment += redirect.title + " → " + redirect.to + ": " + reason + "; ";
declinecount ++;
}
else if (redirect.action == 'comment'){
othercomment += redirect.title + ": " + redirect.comment + ", ";
commentcount ++;
}
}
var reason = '';
if(acceptcount > 0)
reason += '\n*\{\{subst:afc redirect|accept|2=' + acceptcomment + ' Thank you for your contributions to Wikipedia!\}\} \~\~\~\~';
if (declinecount > 0)
reason += '\n*\{\{subst:afc redirect|decline|2=' + declinecomment + '\}\} \~\~\~\~';
if(commentcount > 0)
reason += '\n*\{\{afc comment|1=' + othercomment + '\~\~\~\~\}\}';
reason += '\n';
if(!hascomment && acceptcount == sub.from.length){
if(acceptcount > 1)
reason = '\n*\{\{subst:afc redirect|all\}\} \~\~\~\~\n';
else
reason = '\n*\{\{subst:afc redirect\}\} \~\~\~\~\n';
}
if(acceptcount + declinecount + commentcount > 0){
if(acceptcount + declinecount == sub.from.length){
// Every request disposed of. Close.
var header = text.match(/==[^=]*==/)[0];
if(acceptcount > declinecount)
text = header + "\n\{\{AfC-c|a\}\}\n" + text.substring(header.length);
else
text = header + "\n\{\{AfC-c|d\}\}\n" + text.substring(header.length);
text += reason;
text += '\{\{AfC-c|b\}\}\n';
}
else
text += reason +'\n';
}
totalaccept += acceptcount;
totaldecline += declinecount;
totalcomment += commentcount;
}
pagetext = pagetext.substring(0, startindex) + text + pagetext.substring(endindex);
}
var summary = "Updating submission status:";
if(totalaccept > 0)
summary += " accepting " + totalaccept + " request" + (totalaccept > 1 ? 's' : '');
if(totaldecline > 0){
if(totalaccept > 0)
summary += ',';
summary += " declining " + totaldecline + " request" + (totaldecline > 1 ? 's' : '');
}
if(totalcomment > 0){
if(totalaccept > 0 || totaldecline > 0)
summary += ',';
summary += " commenting on " + totalcomment + " request" + (totalcomment > 1 ? 's' : '');
}
mergeHelper_redirect_editPage(mergeHelper_RedirectPageName, pagetext, token, summary, false);
document.getElementById('mergeHelper_finished_main').style.display = '';
}
function mergeHelper_redirect_getToken(show) {
if (show) {
document.getElementById('mergeHelper_status').innerHTML += '<li id="mergeHelper_gettoken">Getting token</li>';
}
var req = sajax_init_object();
req.open("GET", wgScriptPath + "/api.php?action=query&prop=info&indexpageids=1&intoken=edit&format=json&titles="+encodeURIComponent(mergeHelper_RedirectPageName), false);
req.send(null);
var response = eval('(' + req.responseText + ')');
pageid = response['query']['pageids'][0];
token = response['query']['pages'][pageid]['edittoken'];
delete req;
if (show) {
document.getElementById('mergeHelper_gettoken').innerHTML = 'Got token';
}
return token;
}
function mergeHelper_redirect_editPage(title, newtext, token, summary, createonly) {
document.getElementById('mergeHelper_finished_wrapper').innerHTML = '<span id="mergeHelper_AJAX_finished_'+mergeHelper_Redirect_AJAXnumber+'" style="display:none">' + document.getElementById('mergeHelper_finished_wrapper').innerHTML + '</span>';
var func_id = mergeHelper_Redirect_AJAXnumber;
mergeHelper_Redirect_AJAXnumber++;
document.getElementById('mergeHelper_status').innerHTML += '<li id="mergeHelper_edit'+escape(title)+'">Editing <a href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a></li>';
var req = sajax_init_object();
var params = "action=edit&format=json&token="+encodeURIComponent(token)+"&title="+encodeURIComponent(title)+"&text="+encodeURIComponent(newtext)+"¬minor=1&summary="+encodeURIComponent(summary);
if(createonly)
params += "&createonly=1";
url = wgScriptPath + "/api.php";
req.open("POST", url, true);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", params.length);
req.setRequestHeader("Connection", "close");
req.onreadystatechange = function() {
if(req.readyState == 4 && req.status == 200) {
response = eval('(' + req.responseText + ')');
try {
if (response['edit']['result'] == "Success") {
document.getElementById('mergeHelper_edit'+escape(title)).innerHTML = 'Saved <a href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a>';
} else {
document.getElementById('mergeHelper_edit'+escape(title)).innerHTML = '<div style="color:red"><b>Edit failed on <a href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a></b></div>. Error info:' +response['error']['code'] + ' : ' + response['error']['info'];
}
}
catch(err) {
document.getElementById('mergeHelper_edit'+escape(title)).innerHTML = '<div style="color:red"><b>Edit failed on <a href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a></b></div>';
}
document.getElementById('mergeHelper_AJAX_finished_'+func_id).style.display = '';
delete req;
}
};
req.send(params);
}
function mergeHelper_redirect_getPageText(title, show) {
if(show){
document.getElementById('mergeHelper_status').innerHTML += '<li id="mergeHelper_get'+escape(title)+'">Getting <a href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a></li>';
}
var req = sajax_init_object();
req.open("GET", wgScriptPath + "/api.php?action=query&prop=revisions&rvprop=content&format=json&indexpageids=1&titles="+encodeURIComponent(title), false);
req.send(null);
var response = eval('(' + req.responseText + ')');
pageid = response['query']['pageids'][0];
if (pageid == "-1") {
if(show){
document.getElementById('mergeHelper_get'+escape(title)).innerHTML = '<a class="new" href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a> does not exist';
}
delete req;
return '';
}
pagetext = response['query']['pages'][pageid]['revisions'][0]['*'];
delete req;
if(show){
document.getElementById('mergeHelper_get'+escape(title)).innerHTML = 'Got <a href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a>';
}
return pagetext;
}
function mergeHelper_redirect_generateSelect(title, options, onchange){
var text = '<select name="' + title + '" id="' + title +'" ';
if(onchange != null)
text += 'onchange = "' + onchange + '" ';
text+= '>';
for(var i = 0; i < options.length; i ++){
var o = options[i];
text += '<option value="' + o.value + '" ';
if(o.selected)
text += 'selected="selected" ';
text += '>' + o.label + '</option>';
}
text += "</select>";
return text;
}
function mergeHelper_redirect_addLink() {
addPortletLink("p-cactions", "javascript:mergeHelper_redirect_init()", "Review", "ca-mergeHelper", "Review");
}
addOnloadHook(mergeHelper_redirect_addLink);
}
else if (wgNamespaceNumber == 1) {
var mergeHelper_PageName = wgPageName.replace(/_/g, ' ');
var mergeHelper_AJAXnumber = 0;
var mergeHelper_submissionTitle = wgTitle.replace(/Articles for creation\//g, '');
var mergeHelper_reasonhash = {
'v': 'submission is unsourced or contains only unreliable sources',
'blank': 'submission is blank',
'lang': 'submission is not in English',
'cv': 'submission is a copyright violation',
'exists': 'submission already exists in main space',
'dup': 'submission is a duplicate of another submission',
'redirect': 'submission is a redirect request',
'test': 'submission is a test edit',
'news': 'submission appears to be a news report of a single event',
'dict': 'submission is a dictionary definition',
'joke': 'submission appears to be a joke',
'blp': 'submission does not conform to BLP',
'neo': 'submission is a neologism',
'npov': 'submission is not written from a neutral point of view',
'adv': 'submission is written like an advertisement',
'context': 'submission provides insufficient context',
'mergeto': 'submission is too short but can be merged',
'plot': 'submission is a plot summary',
'essay': 'submission reads like an essay',
'not': 'submission is covered by WP:NOT',
'nn': 'subject appears to be non-notable',
'web': 'subject appears to be non-notable web content',
'prof': 'subject appears to be a non-notable academic',
'athlete': 'subject appears to be a non-notable athlete',
'music': 'subject appears to be a non-notable musical performer or work',
'film': 'subject appears to be a non-notable film',
'corp': 'subject appears to be a non-notable company or organization',
'bio': 'subject appears to be a non-notable person',
'reason': ''
};
function mergeHelper_init() {
if (!wfSupportsAjax()) {
jsMsg('<span style="color:red; font-size:120%">Your browser does not seem to support AJAX, which is required for the mergeHelper script v3.</span>');
return;
}
form = '<div id="mergeHelper_initialform">'+
'<h3>Page Merge helper</h3>'+
'<input type="button" id="mergeHelper_accept_button" name="mergeHelper_accept_button" value="Accept" onclick="mergeHelper_prompt(\'accept\')" />'+
'<input type="button" id="mergeHelper_decline_button" name="mergeHelper_decline_button" value="Decline" onclick="mergeHelper_prompt(\'decline\')" />'+
/*'<input type="button" id="mergeHelper_hold_button" name="mergeHelper_hold_button" value="Hold" onclick="mergeHelper_prompt(\'hold\')" />'+*/
'<input type="button" id="mergeHelper_comment_button" name="mergeHelper_comment_button" value="Comment" onclick="mergeHelper_prompt(\'comment\')" />'+
'<input type="button" id="mergeHelper_propose_button" name="mergeHelper_propose_button" value="Propose" onclick="mergeHelper_prompt(\'propose\')" />'+
'<div id="mergeHelper_extra"></div>';
jsMsg(form);
}
function mergeHelper_prompt(type) {
if(type == 'propose'){
var msg1 = "";
var text = '<br /><br /> <h3>Proposing Article Merge</h3>'+
'<label for="mergeHelper_movetarget">Merge Article FROM: </label><input type="text" id="mergeHelper_movesource" name="mergeHelper_movesource" value="" />'+
'<br /><label for="mergeHelper_mergeReason">Reason to merge Articles: </label><textarea rows="3" cols="60" name="mergeHelper_mergeReason" id="mergeHelper_mergeReason value="' +msg1+'" /></textarea>';
text += '<br /><label for="mergeHelper_pageAppend">Append to page (optional): </label><textarea rows="3" cols="60" name="mergeHelper_pageAppend" id="mergeHelper_pageAppend"></textarea>'+
'<br /><label for="mergeHelper_talkAppend">Append to talk page (optional): </label><textarea rows="3" cols="60" name="mergeHelper_talkAppend" id="mergeHelper_talkAppend"></textarea>';
document.getElementById('mergeHelper_extra').innerHTML += text;
}
if(type == 'accept'){ //TODO: Should automatically figure out where to move from and stop if a merger proposal is not there.
var text = '<br /><br /> <h3>Accepting Merge proposal</h3>'+
'<label for="mergeHelper_movetarget">Merge Article FROM: </label><input type="text" id="mergeHelper_movesource" name="mergeHelper_movesource" value="" />'+
'<br /><label for="mergeHelper_pageAppend">Append to page (optional): </label><textarea rows="3" cols="60" name="mergeHelper_pageAppend" id="mergeHelper_pageAppend"></textarea>'+
'<br /><label for="mergeHelper_talkAppend">Append to talk page (optional): </label><textarea rows="3" cols="60" name="mergeHelper_talkAppend" id="mergeHelper_talkAppend"></textarea>';
document.getElementById('mergeHelper_extra').innerHTML += text;
}
else if(type == 'decline' || type == 'hold'){
var text = '<br /><br /> <h3>' + (type == 'decline' ? 'Declining ' : 'Placing on hold ') +mergeHelper_PageName+'</h3>'+
'<label for="mergeHelper_reason">Reason for ' + type + ': </label>';
var reasonSelect = mergeHelper_generateSelect("mergeHelper_reason",
[{ label: 'v - submission is unsourced or contain only unreliable sources', value: 'v' },
{ label: 'blank - submission is blank', value: 'blank' },
{ label: 'lang - submission is not in English', value: 'lang' },
{ label: 'cv - submission is a copyright violation', value: 'cv' },
{ label: 'exists - submission already exists in main space', value: 'exists' },
{ label: 'dup - submission is a duplicate of another submission', value: 'dup' },
{ label: 'redirect - submission is a redirect request', value: 'redirect' },
{ label: 'test - submission is a test edit', value: 'test' },
{ label: 'news - submission appears to be a news report of a single event', value: 'news' },
{ label: 'dict - submission is a dictionary definition', value: 'dict' },
{ label: 'joke - submission appears to be a joke', value: 'joke' },
{ label: 'blp - submission does not conform to BLP', value: 'blp' },
{ label: 'neo - submission is a neologism', value: 'neo' },
{ label: 'npov - submission is not written from a neutral point of view', value: 'npov' },
{ label: 'adv - submission is written like an advertisement', value: 'adv' },
{ label: 'context - submission provides insufficient context', value: 'context' },
{ label: 'mergeto - submission is too short but can be merged', value: 'mergeto' },
{ label: 'plot - submission is a plot summary', value: 'plot' },
{ label: 'essay - submission reads like an essay', value: 'essay' },
{ label: 'not - submission is covered by WP:NOT', value: 'not' },
{ label: 'nn - subject appears to be non-notable - consider using a more specialized decline reason', value: 'nn' },
{ label: 'web - subject appears to be non-notable web content', value: 'web' },
{ label: 'prof - subject appears to be a non-notable academic', value: 'prof' },
{ label: 'athlete - subject appears to be a non-notable athlete', value: 'athlete' },
{ label: 'music - subject appears to be a non-notable musical performer or work', value: 'music' },
{ label: 'film - subject appears to be a non-notable film', value: 'film' },
{ label: 'corp - subject appears to be a non-notable company or organization', value: 'corp' },
{ label: 'bio - subject appears to be a non-notable person', value: 'bio' },
{ label: 'Custom - reason below', selected : true, value: 'reason' }
], "mergeHelper_onChange(this)");
text += reasonSelect;
text += '<br /><label for="mergeHelper_comments">Additional comments (optional): </label><textarea rows="3" cols="60" name="mergeHelper_comments" id="mergeHelper_comments"></textarea>'+
'<label for="mergeHelper_blank">Blank submission:</label><input type="checkbox" name="mergeHelper_blank" id="mergeHelper_blank" /><br/>' +
'<label for="mergeHelper_notify">Notify author:</label><input type="checkbox" name="mergeHelper_notify" id="mergeHelper_notify" checked="checked" /><br/>';
document.getElementById('mergeHelper_extra').innerHTML += text;
}
else if(type == 'comment'){
var text = '<br /><br /> <h3> Commenting on ' +mergeHelper_PageName+'</h3>'+
'<br /><label for="mergeHelper_comments">Comment: </label><textarea rows="3" cols="60" name="mergeHelper_comments" id="mergeHelper_comments"></textarea>';
document.getElementById('mergeHelper_extra').innerHTML += text;
}
document.getElementById('mergeHelper_extra').innerHTML += '<input type="button" id="mergeHelper_prompt_button" name="mergeHelper_prompt_button" value="Submit" onclick="mergeHelper_act(\''+type+'\')" />';
}
function mergeHelper_act(action) {
var destTitle = wgTitle;
var sourceTitle = document.getElementById("mergeHelper_movesource").value;
var sourceText;
var destText;
var destTalkText;
destTitle = destTitle.replace(/_/g, ' ');
sourceTitle = sourceTitle.replace(/_/g, ' '); // remove underscores from Article Titles
//var assessment = document.getElementById("mergeHelper_assessment").value;
var pageAppend = document.getElementById("mergeHelper_pageAppend").value;
var talkAppend = document.getElementById("mergeHelper_talkAppend").value;
//TODO: check that sourceTitle exists or abort
jsMsg('<ul id="mergeHelper_status"></ul><ul id="mergeHelper_finish"></ul>');
document.getElementById('mergeHelper_finish').innerHTML += '<span id="mergeHelper_finished_wrapper"><span id="mergeHelper_finished_main" style="display:none"><li id="mergeHelper_done"><b>Done (<a href="'+wgArticlePath.replace("$1", encodeURI(mergeHelper_PageName))+'?action=purge" title="'+mergeHelper_PageName+'">Reload page</a>)</b></li></span></span>';
var token = mergeHelper_getToken(true);
if (action =='propose'){
var destTalkPage = mergeHelper_getPageText('talk:'+destTitle);
var destMergerTemplate = '{{Merge from|' +sourceTitle +'|discuss=Talk:' +destTitle +'#Merger proposal|date=' +mergeHelper_nowMonthYear() +'}}\n';
var destSourceTemplate = '{{Merge to|' +destTitle +'|discuss=Talk:' +destTitle +'#Merger proposal|date=' +mergeHelper_nowMonthYear() +'}}\n';
var mergeReason = "\n\n== Merger proposal ==\n\nI propose that [[" +sourceTitle + "]] be merged into [[" + destTitle + "]]. I think that the content in the " +sourceTitle + " article can easily be explained in the context of " + destTitle + ", and the " + sourceTitle + " article is of a reasonable size in which the merging of "+ destTitle+" will not cause any problems as far as article size or undue weight is concerned.\x7e\x7e\x7e\x7e";
//destTalkPage = destMergerTemplate +destTalkPage;
destTalkPage += mergeReason;
var editSummary = "Propose that [[" +sourceTitle + "]] be merged into [[" + destTitle + "]]";
var revid;
revid = mergeHelper_editPageEx('talk:'+destTitle, destTalkPage, token, editSummary); // edit the destination Talk page
document.getElementById('mergeHelper_finish').innerHTML += '<span id="mergeHelper_finished_wrapper"><span id="mergeHelper_finished_main" style="display:none"><li id="mergeHelper_done"><b>Done (<a href="'+wgArticlePath.replace("$1", encodeURI(mergeHelper_PageName))+'?action=purge" title="'+revid['newrevid']+'">Reload page</a>)</b></li></span></span>';
//mergeHelper_movePage(mergeHelper_PageName, newtitle, token, 'Created via \[\[WP:AFC|Articles for Creation\]\] (\[\[WP:WPAFC|you can help!\]\])' , callback);
}
else if(action == 'accept'){
var callback = function(){
var merge_re = /\{\{\s*merge\s*(from|to)\s*\|(?:\{\{[^\{\}]*\}\}|[^\}\{])*\}\}/i;
//sourceText.replace(merge_re, '');
//destText.replace(merge_re, '');
};
sourceText = mergeHelper_getPageText(sourceTitle);
destText = mergeHelper_getPageText(destTitle);
destTalkText = mergeHelper_getPageText('talk:' +destTitle);
var username ='';
// clean up page
var newSourceText = '#REDIRECT [[' +destTitle +']] {{R from merge}}';
var newDestText = '{{Inuse}}\n\n' +destText + '\n<!--merged article follows -->\n\n' + sourceText;
var sourceVarids;
var destVarids;
destVarids = mergeHelper_editPageEx(destTitle, newDestText, token, 'Merged content from [[' +sourceTitle+ ']] to here. See [[Talk:' +destTitle +'#Merger Proposal]].');
sourceVarids = mergeHelper_editPageEx(sourceTitle, newSourceText, token, 'Merged content to [[' +destTitle + ']]. See [[Talk:' + destTitle + '#Merger Proposal]].' );
var diffUrl = mw.config.get('wgServer') + mw.config.get('wgScript') + "?title="+ encodeURI(destTitle) + "&action=historysubmit&diff=" + destVarids['edit']['newvarid'] + "&oldid=" +destVarids.oldvarid;
var copiedTemplate = '{{Copied |from = ' + sourceTitle + '|from_oldid = ' +sourceVarids.oldvarid + '|to =' + destTitle +'|diff = ' +diffUrl +'|date=}}\n';
var newDestTalkText = copiedTemplate + destTalkText;
mergeHelper_editPage('talk:'+destTitle, newDestTalkText, token, 'Added Copied Template.' );
} //end else if
else if(action == 'decline' || action == 'hold'){
var code = document.getElementById("mergeHelper_reason").value;
var reasontext = mergeHelper_reasonhash[code];
var customreason = document.getElementById("mergeHelper_comments").value;
var append = false;
var keep = false;
var blank = document.getElementById("mergeHelper_blank").checked;
var notify = document.getElementById("mergeHelper_notify").checked;
jsMsg('<ul id="mergeHelper_status"></ul><ul id="mergeHelper_finish"></ul>');
document.getElementById('mergeHelper_finish').innerHTML += '<span id="mergeHelper_finished_wrapper"><span id="mergeHelper_finished_main" style="display:none"><li id="mergeHelper_done"><b>Done (<a href="'+wgArticlePath.replace("$1", encodeURI(mergeHelper_PageName))+'?action=purge" title="'+mergeHelper_PageName+'">Reload page</a>)</b></li></span></span>';
var token = mergeHelper_getToken(true);
var text = mergeHelper_getPageText(mergeHelper_PageName);
// Find the first submission or onhold template on the page.
var afc_re = /\{\{\s*afc submission\s*\|\s*[\||h|r](?:\{\{[^\{\}]*\}\}|[^\}\{])*\}\}/i;
if( !afc_re.test( text ) ) {
alert( "Unable to locate AFC submission template, aborting..." );
return;
}
var afctemplate = afc_re.exec(text)[0];
if(afctemplate.search(/\|\s*h\s*\|/i) != -1){
if(action != 'decline'){
append = confirm( "Submission is already on hold. Do you want to add your reason as a comment?" );
if(!append){
return;
}
}
else
if(code == 'reason' && customreason == ''){
keep = true;
}
}
if (!keep) {
if(code == 'reason' && customreason == ''){
alert("You must enter a reason!");
return;
}
}
var startindex = text.indexOf(afctemplate);
var endindex = startindex + afctemplate.length;
//data is always between the first pipe and the one before the timestamp.
var firstpipe = afctemplate.indexOf('|');
var endpipe = afctemplate.indexOf('|ts');
var newtemplate = afctemplate.substring(0, firstpipe);
var summary = '';
var extra = '';
var newcomment = '';
if(code == 'cv'){
extra = prompt("Please enter the url if available, starting with http://");
}
else if(code == 'dup'){
extra = prompt("Please enter the title of the duplicate submission, if possible. Do not enter the prefix (e.g., John Doe).");
}
else if(code == 'mergeto'){
extra = prompt("Please enter the title of the article to merge to, if possible.");
}
else if(code == 'exists'){
extra = prompt("Please enter the title of the existing article, if possible.");
}
else if(code == 'plot'){
extra = prompt("Please enter the title of the existing article on the fiction, if there is one.");
}
if(extra == null){
return;
}
if(!keep && !append){
// overwrite any reason that was there.
newtemplate += '|';
newtemplate += action.substring(0, 1);
newtemplate += '|';
newtemplate += code;
if(code == 'reason'){
newtemplate += '|3=';
newtemplate += customreason;
}
else if(extra != ''){
newtemplate += '|3=';
newtemplate += extra;
}
newtemplate += afctemplate.substring(endpipe);
if(code != 'reason' && customreason != ''){
newcomment = "*\{\{afc comment|1=" + customreason + " \~\~\~\~\}\}";
}
summary = (action == 'decline' ? "Declining submission" : "Placing submission on hold");
if(code == 'reason')
summary += ': see comment therein';
else
summary += ': ' + reasontext;
}
else if (append){
//append the reason as a comment.
newtemplate = afctemplate;
newcomment = "*\{\{afc comment|1=\{\{AFC submission/comments|";
newcomment += code;
if(code == 'reason'){
newcomment += '|2=';
newcomment += customreason;
}
else if(extra != ''){
newcomment += '|2=';
newcomment += extra;
}
newcomment += "\}\} \~\~\~\~ \}\}";
summary = 'Comment on submission';
if(code == 'reason')
summary += '.';
else
summary += ': ' + reasontext;
}
else{
// keep the original reason, just change hold to decline.
var secondpipe = afctemplate.indexOf('|', firstpipe + 1);
newtemplate += '|d';
newtemplate += afctemplate.substring(secondpipe);
summary = 'Decline submission for reasons stated in hold.';
}
if(!append && notify){
var author_re = /\|\s*u=\s*[^\|]*\|/i;
if(author_re.test(afctemplate)){
var user = author_re.exec(afctemplate)[0];
var username = user.split(/=/)[1];
username = username.replace(/[\|]/g,'');
var usertext = mergeHelper_getPageText("User talk:"+username);
usertext += "\n== Your submission at \[\[WP:AFC|Articles for creation\]\] ==";
if(action == 'decline'){
usertext += "\n\{\{subst:afc decline|1=" + mergeHelper_submissionTitle;
if(code == 'cv')
usertext += "| cv = yes";
usertext += "|sig=yes\}\}";
}
else
usertext += "\n\{\{subst:afc onhold|1=" + mergeHelper_submissionTitle + "\}\} \~\~\~\~";
mergeHelper_editPage("User talk:"+username, usertext, token, 'Your submission at \[\[WP:AFC|Articles for creation\]\]');
}
}
if(!blank){
var containComment = (text.indexOf('----') != -1);
if(newcomment != ''){
if(!containComment)
text = text.substring(0, startindex) + newtemplate + '\n' + newcomment + '\n----\n'+ text.substring(endindex);
else{
text = text.substring(0, startindex) + newtemplate + text.substring(endindex);
var idx = text.indexOf('----');
text = text.substring(0, idx) + newcomment +'\n' + text.substring(idx);
}
}
else
text = text.substring(0, startindex) + newtemplate + text.substring(endindex);
}
else
text = newtemplate + '\n' + newcomment + "\n\{\{afc cleared\}\}";
if(action == 'decline'){
// Comment out cats on decline.
text = text.replace(/\[\[Category:/gi, "\[\[:Category:");
}
mergeHelper_editPage(mergeHelper_PageName, text, token, summary);
}
else if(action == 'comment'){
var comment = document.getElementById("mergeHelper_comments").value;
jsMsg('<ul id="mergeHelper_status"></ul><ul id="mergeHelper_finish"></ul>');
document.getElementById('mergeHelper_finish').innerHTML += '<span id="mergeHelper_finished_wrapper"><span id="mergeHelper_finished_main" style="display:none"><li id="mergeHelper_done"><b>Done (<a href="'+wgArticlePath.replace("$1", encodeURI(mergeHelper_PageName))+'?action=purge" title="'+mergeHelper_PageName+'">Reload page</a>)</b></li></span></span>';
var token = mergeHelper_getToken(true);
var text = mergeHelper_getPageText(mergeHelper_PageName);
var containComment = (text.indexOf('----') != -1);
var newComment = "*\{\{afc comment|1=" + comment + "\~\~\~\~\}\}";
if(comment != ''){
if(!containComment){
var afc_re = /\{\{\s*afc submission\s*\|\s*[\||h|r](?:\{\{[^\{\}]*\}\}|[^\}\{])*\}\}/i;
if( !afc_re.test( text ) ) {
alert( "Unable to locate AFC submission template, aborting..." );
return;
}
var afctemplate = afc_re.exec(text)[0];
var endindex = text.indexOf(afctemplate) + afctemplate.length;
text = text.substring(0, endindex) + '\n' + newComment + '\n----\n'+ text.substring(endindex);
}
else{
var idx = text.indexOf('----');
text = text.substring(0, idx) + newComment +'\n' + text.substring(idx);
}
mergeHelper_editPage(mergeHelper_PageName, text, token, "Commenting on submission");
}
}
else if(action == 'mark'){
jsMsg('<ul id="mergeHelper_status"></ul><ul id="mergeHelper_finish"></ul>');
document.getElementById('mergeHelper_finish').innerHTML += '<span id="mergeHelper_finished_wrapper"><span id="mergeHelper_finished_main" style="display:none"><li id="mergeHelper_done"><b>Done (<a href="'+wgArticlePath.replace("$1", encodeURI(mergeHelper_PageName))+'?action=purge" title="'+mergeHelper_PageName+'">Reload page</a>)</b></li></span></span>';
var token = mergeHelper_getToken(true);
var text = mergeHelper_getPageText(mergeHelper_PageName);
var afc_re = /\{\{\s*afc submission\s*\|\s*[\||h](?:\{\{[^\{\}]*\}\}|[^\}\{])*\}\}/i;
if( !afc_re.test( text ) ) {
alert( "Unable to locate AFC submission template, aborting..." );
return;
}
var afctemplate = afc_re.exec(text)[0];
var firstpipe = afctemplate.indexOf('|');
var endpipe = afctemplate.indexOf('|ts');
var newTemplate = afctemplate.substring(0, firstpipe);
newTemplate += '|r||';
newTemplate += afctemplate.substring(endpipe);
var startindex = text.indexOf(afctemplate);
var endindex = text.indexOf(afctemplate) + afctemplate.length;
text = text.substring(0, startindex) + newTemplate + text.substring(endindex);
mergeHelper_editPage(mergeHelper_PageName, text, token, "Marking submission as being reviewed");
}
document.getElementById('mergeHelper_finished_main').style.display = '';
}
function mergeHelper_getPageText(title) {
document.getElementById('mergeHelper_status').innerHTML += '<li id="mergeHelper_get'+escape(title)+'">Getting <a href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a></li>';
var req = sajax_init_object();
req.open("GET", wgScriptPath + "/api.php?action=query&prop=revisions&rvprop=content&format=json&indexpageids=1&titles="+encodeURIComponent(title), false);
req.send(null);
var response = eval('(' + req.responseText + ')');
pageid = response['query']['pageids'][0];
if (pageid == "-1") {
document.getElementById('mergeHelper_get'+escape(title)).innerHTML = '<a class="new" href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a> does not exist';
delete req;
return '';
}
pagetext = response['query']['pages'][pageid]['revisions'][0]['*'];
delete req;
document.getElementById('mergeHelper_get'+escape(title)).innerHTML = 'Got <a href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a>';
return pagetext;
}
function mergeHelper_getToken(show) {
if (show) {
document.getElementById('mergeHelper_status').innerHTML += '<li id="mergeHelper_gettoken">Getting token</li>';
}
var req = sajax_init_object();
req.open("GET", wgScriptPath + "/api.php?action=query&prop=info&indexpageids=1&intoken=edit&format=json&titles="+encodeURIComponent(mergeHelper_PageName), false);
req.send(null);
var response = eval('(' + req.responseText + ')');
pageid = response['query']['pageids'][0];
token = response['query']['pages'][pageid]['edittoken'];
delete req;
if (show) {
document.getElementById('mergeHelper_gettoken').innerHTML = 'Got token';
}
return token;
}
function mergeHelper_movePage(oldtitle, newtitle, token, summary, callback){
document.getElementById('mergeHelper_finished_wrapper').innerHTML = '<span id="mergeHelper_AJAX_finished_'+mergeHelper_AJAXnumber+'" style="display:none">' + document.getElementById('mergeHelper_finished_wrapper').innerHTML + '</span>';
var func_id = mergeHelper_AJAXnumber;
mergeHelper_AJAXnumber++;
document.getElementById('mergeHelper_status').innerHTML += '<li id="mergeHelper_move'+escape(oldtitle)+'">Moving <a href="'+wgArticlePath.replace("$1", encodeURI(oldtitle))+'" title="'+oldtitle+'">'+oldtitle+'</a> to <a href="'+wgArticlePath.replace("$1", encodeURI(newtitle))+'" title="'+newtitle+'">'+newtitle+'</a></li>';
var req = sajax_init_object();
var params = "action=move&format=json&token="+encodeURIComponent(token)+"&from="+encodeURIComponent(oldtitle) +"&to="+encodeURIComponent(newtitle)+"&reason="+encodeURIComponent(summary);
url = wgScriptPath + "/api.php";
req.open("POST", url, true);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", params.length);
req.setRequestHeader("Connection", "close");
req.onreadystatechange = function() {
if(req.readyState == 4 && req.status == 200) {
var error = true;
response = eval('(' + req.responseText + ')');
try {
if (typeof(response['move']) != "undefined") {
document.getElementById('mergeHelper_move'+escape(oldtitle)).innerHTML = 'Moved <a href="'+wgArticlePath.replace("$1", encodeURI(oldtitle))+'" title="'+oldtitle+'">'+oldtitle+'</a>';
error = false;
} else {
document.getElementById('mergeHelper_move'+escape(oldtitle)).innerHTML = '<div style="color:red"><b>Move failed on <a href="'+wgArticlePath.replace("$1", encodeURI(oldtitle))+'" title="'+oldtitle+'">'+oldtitle+'</a></b></div>. Error info:' +response['error']['code'] + ' : ' + response['error']['info'];
}
}
catch(err) {
document.getElementById('mergeHelper_move'+escape(oldtitle)).innerHTML = '<div style="color:red"><b>Move failed on <a href="'+wgArticlePath.replace("$1", encodeURI(oldtitle))+'" title="'+oldtitle+'">'+oldtitle+'</a></b></div>';
}
if(!error){
if(callback != null)
callback();
}
document.getElementById('mergeHelper_AJAX_finished_'+func_id).style.display = '';
delete req;
}
};
req.send(params);
}
function mergeHelper_editPage(title, newtext, token, summary) {
document.getElementById('mergeHelper_finished_wrapper').innerHTML = '<span id="mergeHelper_AJAX_finished_'+mergeHelper_AJAXnumber+'" style="display:none">' + document.getElementById('mergeHelper_finished_wrapper').innerHTML + '</span>';
var func_id = mergeHelper_AJAXnumber;
mergeHelper_AJAXnumber++;
document.getElementById('mergeHelper_status').innerHTML += '<li id="mergeHelper_edit'+escape(title)+'">Editing <a href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a></li>';
var req = sajax_init_object();
var params = "action=edit&format=json&token="+encodeURIComponent(token)+"&title="+encodeURIComponent(title)+"&text="+encodeURIComponent(newtext)+"¬minor=1&summary="+encodeURIComponent(summary);
url = wgScriptPath + "/api.php";
req.open("POST", url, true);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", params.length);
req.setRequestHeader("Connection", "close");
req.onreadystatechange = function() {
if(req.readyState == 4 && req.status == 200) {
response = eval('(' + req.responseText + ')');
try {
if (response['edit']['result'] == "Success") {
document.getElementById('mergeHelper_edit'+escape(title)).innerHTML = 'Saved <a href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a>';
} else {
document.getElementById('mergeHelper_edit'+escape(title)).innerHTML = '<div style="color:red"><b>Edit failed on <a href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a></b></div>. Error info:' +response['error']['code'] + ' : ' + response['error']['info'];
}
}
catch(err) {
document.getElementById('mergeHelper_edit'+escape(title)).innerHTML = '<div style="color:red"><b>Edit failed on <a href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a></b></div>';
}
document.getElementById('mergeHelper_AJAX_finished_'+func_id).style.display = '';
delete req;
}
};
req.send(params);
}
function mergeHelper_editPageEx(title, newtext, token, summary ) {
var revid = {};
document.getElementById('mergeHelper_finished_wrapper').innerHTML = '<span id="mergeHelper_AJAX_finished_'+mergeHelper_AJAXnumber+'" style="display:none">' + document.getElementById('mergeHelper_finished_wrapper').innerHTML + '</span>';
var func_id = mergeHelper_AJAXnumber;
mergeHelper_AJAXnumber++;
document.getElementById('mergeHelper_status').innerHTML += '<li id="mergeHelper_edit'+escape(title)+'">Editing <a href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a></li>';
var req = sajax_init_object();
var params = "action=edit&format=json&token="+encodeURIComponent(token)+"&title="+encodeURIComponent(title)+"&text="+encodeURIComponent(newtext)+"¬minor=1&summary="+encodeURIComponent(summary);
url = wgScriptPath + "/api.php";
req.open("POST", url, true);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
req.setRequestHeader("Content-length", params.length);
req.setRequestHeader("Connection", "close");
req.onreadystatechange = function() {
if(req.readyState == 4 && req.status == 200) {
response = eval('(' + req.responseText + ')');
try {
if (response['edit']['result'] == "Success") {
revid = {
'pageid' : response['edit']['pageid'],
'oldrevid' : response['edit']['oldrevid'],
'newrevid' : response['edit']['newrevid']
};
} else {
document.getElementById('mergeHelper_edit'+escape(title)).innerHTML = '<div style="color:red"><b>Edit failed on <a href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a></b></div>. Error info:' +response['error']['code'] + ' : ' + response['error']['info'];
}
}
catch(err) {
document.getElementById('mergeHelper_edit'+escape(title)).innerHTML = '<div style="color:red"><b>Edit failed on <a href="'+wgArticlePath.replace("$1", encodeURI(title))+'" title="'+title+'">'+title+'</a></b></div>';
}
document.getElementById('mergeHelper_AJAX_finished_'+func_id).style.display = '';
delete req;
}
};
req.send(params);
return response;
}
function mergeHelper_addLink() {
addPortletLink("p-cactions", "javascript:mergeHelper_init()", "MergeHelper", "ca-mergeHelper", "Article Merge Helper");
}
function mergeHelper_onChange(select){
var value = select.options[select.selectedIndex].value;
if(value == 'blp' || value == 'cv'){
document.getElementById("mergeHelper_blank").setAttribute("checked", "checked");
}
else
document.getElementById("mergeHelper_blank").removeAttribute("checked");
}
function mergeHelper_nowMonthYear(){
var today = new Date();
var monthnames = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
month = monthnames[today.getUTCMonth()];
day = today.getUTCDate();
year = today.getUTCFullYear();
var datestring = month + " " + year;
return datestring;
}
function mergeHelper_generateSelect(title, options, onchange){
var text = '<select name="' + title + '" id="' + title +'" ';
if(onchange != null)
text += 'onchange = "' + onchange + '" ';
text+= '>';
for(var i = 0; i < options.length; i ++){
var o = options[i];
text += '<option value="' + o.value + '" ';
if(o.selected)
text += 'selected="selected" ';
text += '>' + o.label + '</option>';
}
text += "</select>";
return text;
}
addOnloadHook(mergeHelper_addLink);
function values (k /*, and values */) {
return typeof k === "function"
? k.apply(this, Array.prototype.slice.call(arguments, 1))
: arguments[1];
}
}