User:DannyS712/DiscussionCloser.js
//
//Credits to Equazcion, Evad37, and Abelmoschus Esculentus
//Date: 6 Mar 2019
//Forked from [[User:Abelmoschus Esculentus/DiscussionCloser.js]
//Maintained by DannyS712
var DiscussionCloser_config = {
name: 'DiscussionCloser',
version: '1.7.3',
debug: false
};
var DiscussionCloser_ending = ' (' + DiscussionCloser_config.name + ' v.' + DiscussionCloser_config.version + ')';
/* HELPER FUNCTIONS */
function dc_make_bottom(template){
var bottom;
switch (template) {
case "atop":
case "atopr":
case "atopy":
case "atopg":
case "subst:RMT":
bottom = "abot";
break;
case "hat":
bottom = "hab";
break;
default:
bottom = "closed rfc bottom";
break;
}
bottom = "{{" + bottom + "}}";
return bottom;
}
function alreadyClosed ( content ){
content = content.toLowerCase();
if (content.includes('{{atop') ||
content.includes('{{hat') ||
content.includes('{{abot') ||
content.includes('{{archive') ||
content.includes('{{rfctop') ||
content.includes('{{rfc bottom') ||
content.includes('{{archive bottom') ||
content.includes('{{hidden archive bottom') ||
content.includes('')
) return true;
return false;
}
function dc_radio(i) {
$('#DC-e').val("");
if (i == 1) {
$('#DC-e').prop('disabled', false);
}
if (i == 2) {
$('#DC-e').prop('disabled', true);
}
}
/* MAIN FUNCTIONs */
function dc_init(){
if ((($('#ca-addsection').length > 0) ||
(mw.config.get('wgPageName') == 'Wikipedia:Administrators\'_noticeboard/Edit_warring') ||
(mw.config.get('wgPageName') == 'Wikipedia:In_the_news/Candidates')) &&
(mw.config.get('wgAction') == 'view')) {
dc_run();
}
}
function dc_run() {
$('span.mw-headline').each(function(index, value){
var editSectionUrl = $(this).parent().find('.mw-editsection a:first').attr('href');
var sectionReg = /§ion=(.*)/;
var sectionRaw = sectionReg.exec(editSectionUrl);
if ((sectionRaw !== null) && (sectionRaw[1].indexOf('T') < 0)){
var section = parseInt(sectionRaw[1]);
var sectionLevel = false;
switch ($(this).parent().prop("tagName")) {
case 'H2':
sectionLevel = 'h2';
break;
case 'H3':
sectionLevel = 'h3';
break;
case 'H4':
sectionLevel = 'h4';
break;
default:
break;
}
if (sectionLevel && sectionLevel !== false) {
$(this).parent(sectionLevel).append('
');$(this).parent(sectionLevel).find('a.closeLink').click(function(){
$('body').prepend('
'
'
'+'
'+
'
'+'
'+
'
'+'
'
$("#DC-interface-header, #DC-interface-content, #DC-interface-footer").empty();
$("#DC-interface-header").text("Discussion Closer");
$("#DC-interface-content").append(
$('
$('
$('').attr({'type':'radio', 'name':'DC-radio','id':'DC-radio1','value':'atop','checked':'true','onchange':'dc_radio(1)'}),
$('
$('').attr({'type':'radio', 'name':'DC-radio','id':'DC-radio2','value':'atopg','onchange':'dc_radio(1)'}),
$('
$('').attr({'type':'radio', 'name':'DC-radio','id':'DC-radio3','value':'atopy','onchange':'dc_radio(1)'}),
$('
$('').attr({'type':'radio', 'name':'DC-radio','id':'DC-radio4','value':'atopr','onchange':'dc_radio(1)'}),
$('
$('').attr({'type':'radio', 'name':'DC-radio','id':'DC-radio5','value':'closed rfc top','onchange':'dc_radio(2)'}),
$('
$('').attr({'type':'radio', 'name':'DC-radio','id':'DC-radio6','value':'hat','onchange':'dc_radio(2)'}),
$('
$('').attr({'type':'radio', 'name':'DC-radio','id':'DC-radio7','value':'subst:RMT','onchange':'dc_radio(2)'}),
$('
),
$('
$('
$('').attr({'type':'text','name':'DC-e','id':'DC-e'})
),
$('
$('
$('
),
$('
$('
$('').attr({'type':'text','name':'DC-es','id':'DC-es'})
),
$('
$('
$('
);
$("#DC-interface-footer").append(
$('
$('
$('
$('
);
document.getElementById("DC-modal").addEventListener( "keydown", function ( key ) {
if( key.ctrlKey && ( key.keyCode == 10 || key.keyCode == 13 ) ) {
document.getElementById("DC-done").click();
}
else if ( key.keyCode == 27 ){
document.getElementById("DC-cancel").click();
}
});
$('#DC-cancel').click(function() {
$('#DC-modal').remove();
});
$('#DC-prev').click(function() {
$('#DC-loading').show();
var template = $("input[name=DC-radio]:checked").val();
var status = $('#DC-e').val();
var comment = $('#DC-com').val();
var request = {
action:"query",
titles: mw.config.get('wgPageName'),
rvsection: section,
prop: "revisions|info",
intoken: "edit",
rvprop: "content",
indexpageids: 1,
dataType: "xml",
format: "xml"
};
var bottom = dc_make_bottom( template );
$.get(mw.config.get("wgScriptPath")+"/api.php", request, function(response){
var contentSection = '\r\r' + $(response).find('rev').text();
var discussiontext = contentSection.substring(contentSection.substring(3,contentSection.length).indexOf('\n')+3, contentSection.length);
var title = contentSection.substring(2, contentSection.length - discussiontext.length);
var wikitext = title + '\n{{'+template+'\n| status = '+status+'\n| result = '+comment+'\n}}'+discussiontext+'\n'+bottom;
var sectiontitle = title.replace('==', ).replace('==', ).replace('\n', ).replace('/r',).trim();
var sectiontitle2 = sectiontitle.replace(/ /g, '_');
if (template === "closed rfc top") {
wikitext = wikitext.replace(/(\r|\n)?{{rfc[^\}]*}}/g, '')
.replace(/(\r|\n)?{{[^C]+ClueBot\sIII\/DoNotArchiveUntil\|\d*}}/g, '');
} else if (template === "subst:RMT"){
wikitext = wikitext.replace(/{{requested move\/dated\|[^}]*?}}\n?/i, '');
}
jQuery.ajax({
url:mw.util.wikiScript('api'),
dataType:'json',
type:'POST',
data:{
format:'json',
action:'parse',
pst:1,
text:wikitext,
title:mw.config.get('wgPageName'),
prop:'text'
}
}).done(function(r) {
if(!r.parse || !r.parse.text || !r.parse.text['*']){
alert('Error previewing.');
}
$('#DC-loading').hide();
$('#DC-prevt').html('
Preview:
');
$('#DC-prevdiv').html(r.parse.text['*']+'
').css({'display':'block','background-color':'white'});
$('#DC-closeprev').show();
$('#DC-closeprev').click(function() {
$('#DC-prevt').empty();
$('#DC-prevdiv').empty().css({'display':,'background-color':,'border-color':'',"border-width":"", "border-style":""});
$('#DC-closeprev').hide();
});
});
});
});
$('#DC-done').click(function() {
var template = $("input[name=DC-radio]:checked").val();
var status = $('#DC-e').val();
var editsummary = $('#DC-es').val();
if (editsummary === "") {
editsummary = "Closing discussion";
}
var comment = $('#DC-com').val();
$('#DC-done').remove();
$('#DC-prev').remove();
$('#DC-cancel').remove();
$('#DC-interface-content').empty();
$("#DC-interface-content").text('Retrieving information...');
var request = {
action:"query",
titles: mw.config.get('wgPageName'),
rvsection: section,
prop: "revisions|info",
intoken: "edit",
rvprop: "content",
indexpageids: 1,
dataType: "xml",
format: "xml"
};
$("#DC-interface-content").append('Done!
Closing discussion...');
var bottom = dc_make_bottom( template );
$.get(mw.config.get("wgScriptPath")+"/api.php", request, function(response){
var contentSection = '\r\r' + $(response).find('rev').text();
var discussiontext = contentSection.substring(contentSection.substring(3,contentSection.length).indexOf('\n')+3, contentSection.length);
var title = contentSection.substring(2, contentSection.length - discussiontext.length);
var wikitext = title + '\n{{'+template+'\n| status = '+status+'\n| result = '+comment+'\n}}\n\n'+discussiontext+'\n'+bottom;
var sectiontitle = title.replace(/=/g, ).replace('\n', ).replace('/r','').trim();
var sectiontitle2 = sectiontitle.replace(/ /g, '_');
if (template === "closed rfc top") {
wikitext = wikitext.replace(/(\r|\n)?{{rfc[^\}]*}}/g, '')
.replace(/(\r|\n)?{{[^C]+ClueBot\sIII\/DoNotArchiveUntil\|\d*}}/g, '');
} else if (template === "subst:RMT" ){
wikitext = wikitext.replace(/\n?{{requested move\/dated\|[^}]*?}}\n?\n?/i, '');
}
var request2 = {
action:"edit",
section: section,
title: mw.config.get('wgPageName'),
text: wikitext,
summary: '/* ' + sectiontitle + ' */ ' + editsummary + DiscussionCloser_ending,
token: mw.user.tokens.get("csrfToken")
};
var willClose = true;
if (alreadyClosed( contentSection )) {
willClose = confirm('The discussion may have already been closed. Continue?');
}
if (!willClose) {
$("#DC-interface-content").append('Aborted by user
Finished!');
$('#DC-interface-footer').append(
$('
);
$('#DC-close').click(function() {
$('#DC-modal').remove();
window.location.href = 'https://en.wikipedia.org/wiki/'+mw.config.get('wgPageName')+'#'+sectiontitle2;
window.location.reload();
});
}
else {
$.when(
$.post(mw.config.get("wgScriptPath")+"/api.php", request2, function(response2){
}).done(function() {
$("#DC-interface-content").append('Done!
Finished!');
$('#DC-interface-footer').append(
$('
);
$('#DC-close').click(function() {
$('#DC-modal').remove();
window.location.href = 'https://en.wikipedia.org/wiki/'+mw.config.get('wgPageName')+'#'+sectiontitle2;
window.location.reload();
});
}));
}
});
});
});
}
}
});
}
mw.loader.using(['mediawiki.util', 'mediawiki.api', 'mediawiki.Title'], function() {
mw.loader.load('//en.wikipedia.org/w/index.php?title=User:DannyS712/DiscussionCloser.css&action=raw&ctype=text/css', 'text/css'); // Import stylesheet
dc_init();
});
//