User:Jayanta (CIS-A2K)/DiscussionCloser.js
Appearance
From Meta, a Wikimedia project coordination wiki
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
//<nowiki> //Credits to Equazcion, Evad37, and Abelmoschus Esculentus //Date: 6 Mar 2019 //Forked from [[User:Abelmoschus Esculentus/DiscussionCloser.js] //Maintained by DannyS712 varDiscussionCloser_config={ name:'[[User:Jayanta (CIS-A2K)/DiscussionCloser.js|DiscussionCloser]]', version:'1.7.3', debug:false }; varDiscussionCloser_ending=' ('+DiscussionCloser_config.name+' v.'+DiscussionCloser_config.version+')'; /* HELPER FUNCTIONS */ functiondc_make_bottom(template){ varbottom; 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+"}}"; returnbottom; } functionalreadyClosed(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 -->') )returntrue; returnfalse; } functiondc_radio(i){ $('#DC-e').val(""); if(i==1){ $('#DC-e').prop('disabled',false); } if(i==2){ $('#DC-e').prop('disabled',true); } } /* MAIN FUNCTIONs */ functiondc_init(){ if((($('#ca-addsection').length>0)|| (mw.config.get('wgPageName')=='CIS-A2K/Requests/Projects')|| (mw.config.get('wgPageName')=='CIS-A2K/Requests/IT Allowance')|| (mw.config.get('wgPageName')=='CIS-A2K/Requests/Internet_support'))&& (mw.config.get('wgAction')=='view')){ dc_run(); } } functiondc_run(){ $('span.mw-headline').each(function(index,value){ vareditSectionUrl=$(this).parent().find('.mw-editsection a:first').attr('href'); varsectionReg=/§ion=(.*)/; varsectionRaw=sectionReg.exec(editSectionUrl); if((sectionRaw!==null)&&(sectionRaw[1].indexOf('T')<0)){ varsection=parseInt(sectionRaw[1]); varsectionLevel=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&§ionLevel!==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(); } elseif(key.keyCode==27){ document.getElementById("DC-cancel").click(); } }); $('#DC-cancel').click(function(){ $('#DC-modal').remove(); }); $('#DC-prev').click(function(){ $('#DC-loading').show(); vartemplate=$("input[name=DC-radio]:checked").val(); varstatus=$('#DC-e').val(); varcomment=$('#DC-com').val(); varrequest={ action:"query", titles:mw.config.get('wgPageName'), rvsection:section, prop:"revisions|info", intoken:"edit", rvprop:"content", indexpageids:1, dataType:"xml", format:"xml" }; varbottom=dc_make_bottom(template); $.get(mw.config.get("wgScriptPath")+"/api.php",request,function(response){ varcontentSection='\r\r'+$(response).find('rev').text(); vardiscussiontext=contentSection.substring(contentSection.substring(3,contentSection.length).indexOf('\n')+3,contentSection.length); vartitle=contentSection.substring(2,contentSection.length-discussiontext.length); varwikitext=title+'\n{{'+template+'\n| status = '+status+'\n| result = '+comment+'\n}}'+discussiontext+'\n'+bottom; varsectiontitle=title.replace('==','').replace('==','').replace('\n','').replace('/r','').trim(); varsectiontitle2=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,''); }elseif(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(){ vartemplate=$("input[name=DC-radio]:checked").val(); varstatus=$('#DC-e').val(); vareditsummary=$('#DC-es').val(); if(editsummary===""){ editsummary="Closing discussion"; } varcomment=$('#DC-com').val(); $('#DC-done').remove(); $('#DC-prev').remove(); $('#DC-cancel').remove(); $('#DC-interface-content').empty(); $("#DC-interface-content").text('Retrieving information...'); varrequest={ 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...'); varbottom=dc_make_bottom(template); $.get(mw.config.get("wgScriptPath")+"/api.php",request,function(response){ varcontentSection='\r\r'+$(response).find('rev').text(); vardiscussiontext=contentSection.substring(contentSection.substring(3,contentSection.length).indexOf('\n')+3,contentSection.length); vartitle=contentSection.substring(2,contentSection.length-discussiontext.length); varwikitext=title+'\n{{'+template+'\n| status = '+status+'\n| result = '+comment+'\n}}\n\n'+discussiontext+'\n'+bottom; varsectiontitle=title.replace(/=/g,'').replace('\n','').replace('/r','').trim(); varsectiontitle2=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,''); }elseif(template==="subst:RMT"){ wikitext=wikitext.replace(/\n?{{requested move\/dated\|[^}]*?}}\n?\n?/i,''); } varrequest2={ action:"edit", section:section, title:mw.config.get('wgPageName'), text:wikitext, summary:'/* '+sectiontitle+' */ '+editsummary+DiscussionCloser_ending, token:mw.user.tokens.get("csrfToken") }; varwillClose=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://meta.wikimedia.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('<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://meta.wikimedia.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(); }); //</nowiki>