User:DannyS712/DiscussionCloser.js

//<nowiki>//Credits to Equazcion, Evad37, and Abelmoschus Esculentus//Date: 6 Mar 2019//Forked from [[User:Abelmoschus Esculentus/DiscussionCloser.js]//Maintained by DannyS712var DiscussionCloser_config = {name: '[[User:DannyS712/DiscussionCloser|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('<!-- template:rm top -->')) 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 = /&section=(.*)/;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(' <div style="font-size:.6em;font-weight:bold;float:right"> | <a id="' + section + '" class="closeLink">' + 'Close' + '</a></div>');$(this).parent(sectionLevel).find('a.closeLink').click(function(){$('body').prepend('<div id="DC-modal">'+'<div id="DC-interface">'+'<h4 id="DC-interface-header"></h4>'+'<hr>'+'<div id="DC-interface-content"></div>'+'<hr>'+'<div id="DC-interface-footer"></div>'+'</div>'+'</div>');$("#DC-interface-header, #DC-interface-content, #DC-interface-footer").empty();$("#DC-interface-header").text("Discussion Closer");$("#DC-interface-content").append($('<div class="DC-bottom">').append($('<label>').attr({'id':'DC-label'}).text('Options: '),$('<input>').attr({'type':'radio', 'name':'DC-radio','id':'DC-radio1','value':'atop','checked':'true','onchange':'dc_radio(1)'}),$('<label>').text('Generic (blue) '),$('<input>').attr({'type':'radio', 'name':'DC-radio','id':'DC-radio2','value':'atopg','onchange':'dc_radio(1)'}),$('<label>').text('Generic (green) '),$('<input>').attr({'type':'radio', 'name':'DC-radio','id':'DC-radio3','value':'atopy','onchange':'dc_radio(1)'}),$('<label>').text('Generic (yellow) '),$('<input>').attr({'type':'radio', 'name':'DC-radio','id':'DC-radio4','value':'atopr','onchange':'dc_radio(1)'}),$('<label>').text('Generic (red) '),$('<input>').attr({'type':'radio', 'name':'DC-radio','id':'DC-radio5','value':'closed rfc top','onchange':'dc_radio(2)'}),$('<label>').text('RfC '),$('<input>').attr({'type':'radio', 'name':'DC-radio','id':'DC-radio6','value':'hat','onchange':'dc_radio(2)'}),$('<label>').text('Hidden archive '),$('<input>').attr({'type':'radio', 'name':'DC-radio','id':'DC-radio7','value':'subst:RMT','onchange':'dc_radio(2)'}),$('<label>').text('Requested move ')),$('<div class="DC-bottom">').append($('<label>').text('Status (optional): '),$('<input>').attr({'type':'text','name':'DC-e','id':'DC-e'})),$('<div class="DC-bottom">').append($('<label>').text('Closing comment:'),$('<textarea>').css({'resize':'none'}).attr({'name':'DC-com','id':'DC-com','rows':'17','cols':'30'})),$('<div class="DC-bottom">').append($('<label>').text('Edit summary ("Closing discussion" if left blank): '),$('<input>').attr({'type':'text','name':'DC-es','id':'DC-es'})),$('<div class="DC-bottom">').attr('id','DC-prevt'),$('<div class="DC-bottom">').attr('id','DC-prevdiv'),$('<button>').attr('id', 'DC-closeprev').text('Close preview').hide());$("#DC-interface-footer").append($('<button>').attr({'name':'DC-done', 'id':'DC-done'}).text('Close discussion'),$('<button>').attr({'name':'DC-prev', 'id':'DC-prev'}).text('Preview'),$('<button>').attr('id', 'DC-cancel').text('Cancel'),$('<label>').attr('id','DC-loading').text(' Loading preview...').hide());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)?<!--\s\[\[User:DoNotArchiveUntil\]\][^->]*-->{{[^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('<hr>Preview:<br>');$('#DC-prevdiv').html(r.parse.text['*']+'<br />').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('<b>Done!</b><br>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)?<!--\s\[\[User:DoNotArchiveUntil\]\][^->]*-->{{[^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('<b>Aborted by user</b><br><b>Finished!</b>');$('#DC-interface-footer').append($('<button>').attr('id', 'DC-close').text('Done'));$('#DC-close').click(function() {$('#DC-modal').remove();window.location.href = 'https://www.search.com.vn/wiki/en/'+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('<b>Done!</b><br><b>Finished!</b>');$('#DC-interface-footer').append($('<button>').attr('id', 'DC-close').text('Done'));$('#DC-close').click(function() {$('#DC-modal').remove();window.location.href = 'https://www.search.com.vn/wiki/en/'+mw.config.get('wgPageName')+'#'+sectiontitle2;window.location.reload();});}));}});});});}}});}mw.loader.using(['mediawiki.util', 'mediawiki.api', 'mediawiki.Title'], function() {mw.loader.load('https://www.search.com.vn/wiki/index.php?lang=en&q=User:DannyS712/DiscussionCloser.css&action=raw&ctype=text/css', 'text/css'); // Import stylesheetdc_init();});//</nowiki>