Jump to content
Wikimedia Meta-Wiki

User:Jayanta (CIS-A2K)/DiscussionCloser.js

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=/&section=(.*)/;
 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&&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();
 }
 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>

AltStyle によって変換されたページ (->オリジナル) /