Участник:Serpent Vlad/featuredarticles.js

/* 
 * Скрипт для ВП:КИС
 * Инструкция — Участник:Serpent Vlad/Избранные статьи
 * За основу взят Участник:Claymore/goodarticles.js
 * Лицензия: GNU GPL
 * Версия: 1.3.1 03.02.2019
 * Автор: Serpent Vlad
*/

if( typeof( wfAnchorEncode ) != "function" ) {
  function wfAnchorEncode(str) {
    str = encodeURIComponent( str );
    str = str.replace( /%/g, "." );
    str = str.replace( /\.20/g, "_" );
    str = str.replace( /\.3A/g, ":" );
    return str;
  }
}

function ch( o ) { for( var i in o ) { return o[i] } }

function replTitle() {
	var title = mw.config.get('wgPageName').replace( /\_/g, " " );
	title = title.replace( /\(/g, "\\(" );
	title = title.replace( /\)/g, "\\)" );
	title = title.replace( /\-/g, "\\-" );
	title = title.replace( /\—/g, "\\—" );
	title = title.replace( /\,/g, "\\," );
	title = title.replace( /\«/g, "\\«" );
	title = title.replace( /\»/g, "\\»" );
	return title;
}

function isOfficer() {
    var userName = mw.config.get('wgUserName');
        return false // список избирающих проекта Добротные статьи (в алфавитном порядке)
            || userName  == 'Serpent Vlad' // 
            || userName  == 'Victoria' // 
            || userName  == 'Vladimir Solovjev' // 
            || userName  == 'Levg' // 
            || userName  == 'Deinocheirus' // 
            || userName  == 'Zanka' // 
            || userName  == 'Sir Shurf' // 
            || userName  == 'Melirius' // 
}

function sendError( textError ) {
	var sectiontext = "== Ошибка скрипта featuredarticles.js ==";
	var talktext = "При избрании статьи [[" + mw.config.get('wgPageName') + "]] [[Участник:Serpent Vlad/featuredarticles.js|скрипт]] не сработал из-за следующей ошибки: " + textError + ". ~~\~~\n";
	
	var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=edit&title=' + encodeURIComponent( 'Обсуждение участника:Serpent Vlad' );
    var rq = "summary=" + encodeURIComponent( 'Сообщение об ошибке в работе скрипта избрания КИС' ) +
             "&section=" + encodeURIComponent( 'new' ) +
             "&sectiontitle=" + encodeURIComponent( sectiontext ) +
             "&text=" + encodeURIComponent( talktext ) +
             "&token=" + encodeURIComponent( wgMakeFeatured.edittoken );
 
    wgMakeFeatured.rq.onreadystatechange = wgMakeFeatured.onNominationFalse;
    wgMakeFeatured.rq.open( "POST", uri, true );
    wgMakeFeatured.rq.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    wgMakeFeatured.rq.send( rq );
}

var wgMakeFeatured = {
  'rq' : null,
  'newtext' : '',
  'talktext' : '',
  'editsummary' : '',
  'edittoken' : '',
  'date' : '',
  'monthNow' : '',
  'months' : {
    '0' : 'Январь',
    '1' : 'Февраль',
    '2' : 'Март',
    '3' : 'Апрель',
    '4' : 'Май',
    '5' : 'Июнь',
    '6' : 'Июль',
    '7' : 'Август',
    '8' : 'Сентябрь',
    '9' : 'Октябрь',
    '10' : 'Ноябрь',
    '11' : 'Декабрь'
  },
  'months_to' : {
    '0' : 'Января',
    '1' : 'Февраля',
    '2' : 'Марта',
    '3' : 'Апреля',
    '4' : 'Мая',
    '5' : 'Июня',
    '6' : 'Июля',
    '7' : 'Августа',
    '8' : 'Сентября',
    '9' : 'Октября',
    '10' : 'Ноября',
    '11' : 'Декабря'
  },
 
  'addMakeFeaturedTab' : function() {
    if( !document.getElementById( 'featured-candidate' ) ) return;
 
 	mw.loader.using('mediawiki.util').done( function() {
    	mw.util.addPortletLink( 'p-cactions', 'javascript:wgMakeFeatured.makeFeatured()',
                    'Избрать ИС', 'ca-make-featured', 'Сделать статью избранной' );
 	} );
  },
 
  'onTextDownload' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    var pgtext = ch(result.query.pages).revisions[0]['*'];
    var nominationRegex = /\{{2}(?:Кандидат в избранные статьи|Хорошая статья и кандидат в избранные)\|(\d{1,2})(?: |.)([а-я]+|\d{1,2})(?: |.)(\d{4})(?:|\|[а-я]+)\}{2}/i;
    if (!pgtext.match(nominationRegex)) {
    	alert('Редактирование невозможно: нет даты (либо она неверно указана) в шаблоне кандидата в избранные статьи (смотрите руководство к скрипту)'); 
    	sendError('нет даты (либо она неверно указана) в шаблоне кандидата в избранные статьи (смотрите руководство к скрипту) — в <onTextDownload>');
    	return;
    }
    var match = pgtext.match( nominationRegex );
    if (/\d/.test(match[2])) { wgMakeFeatured.monthNow = wgMakeFeatured.months_to[match[2] - 1]; } else { wgMakeFeatured.monthNow = match[2]; }
    wgMakeFeatured.date = match[1] + ' ' + wgMakeFeatured.monthNow + ' ' + match[3];
    wgMakeFeatured.newtext = pgtext.replace( nominationRegex, '{{Избранная статья}}' );
    var today = '{{' + 'subst:CURRENTDAY}} {{' + 'subst:CURRENTMONTHNAMEGEN}} {{' + 'subst:CURRENTYEAR}}';
    
    wgMakeFeatured.talktext = '{{Сообщение ИС|' + today + '|' + mw.config.get('wgPageName') + '}}\n';
    wgMakeFeatured.editsummary = "статья [[" + mw.config.get('wgPageName') + "]] теперь [[ВП:ИЗБ|ИС]]";
    
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=info&meta=tokens&type=csrf&titles=' + encodeURIComponent( mw.config.get('wgPageName') );
    wgMakeFeatured.rq.onreadystatechange = wgMakeFeatured.onTokenDownload;
    wgMakeFeatured.rq.open( "GET", uri, true );
    wgMakeFeatured.rq.send( "" );
  },
 
  'onTokenDownload' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    wgMakeFeatured.edittoken = result.query.tokens.csrftoken;
    if( !wgMakeFeatured.edittoken ) {
      alert( 'Редактирование невозможно – не могу получить токен!' );
      sendError('не могу получить токен');
      return;
    } else {
    	alert('Токен получен...');
    }
 
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=edit&title=' + encodeURIComponent( mw.config.get('wgPageName') );
    var rq = "summary=" + encodeURIComponent( wgMakeFeatured.editsummary ) +
             "&text=" + encodeURIComponent( wgMakeFeatured.newtext ) +
             "&token=" + encodeURIComponent( wgMakeFeatured.edittoken );
 
    wgMakeFeatured.rq.onreadystatechange = wgMakeFeatured.onEditSaved;
    wgMakeFeatured.rq.open( "POST", uri, true );
    wgMakeFeatured.rq.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    wgMakeFeatured.rq.send( rq );
  },
 
  'onEditSaved' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    if( typeof( result.error ) != 'undefined' ) {
      alert( "Не удалось сохранить страницу: " + result.error.info );
      sendError(result.error.info + ' — в <onEditSaved>');
      return;
    } else {
    	alert('Страница ' + mw.config.get('wgPageName') + ' обновлена...');
    }
 
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=edit&title=' + encodeURIComponent( 'Обсуждение:' + mw.config.get('wgPageName') );
    var rq = "summary=" + encodeURIComponent( wgMakeFeatured.editsummary ) +
             "&prependtext=" + encodeURIComponent( wgMakeFeatured.talktext ) +
             "&token=" + encodeURIComponent( wgMakeFeatured.edittoken );
 
    wgMakeFeatured.rq.onreadystatechange = wgMakeFeatured.onNominationSaved;
    wgMakeFeatured.rq.open( "POST", uri, true );
    wgMakeFeatured.rq.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    wgMakeFeatured.rq.send( rq );	
  },
 
  'onNominationSaved' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    if( typeof( result.error ) != 'undefined' ) {
      alert( "Не удалось сохранить страницу: " + result.error.info );
      sendError(result.error.info + ' — в <onNominationSaved>');
      return;
    } else {
    	alert('Страница обсуждения статьи ' + mw.config.get('wgPageName') + ' обновлена...');
    }

    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=revisions&rvprop=content&rvlimit=1&titles=' +
              encodeURIComponent( 'Проект:Избранные_статьи/Кандидаты' );
    wgMakeFeatured.rq.onreadystatechange = wgMakeFeatured.onLogDownload;
    wgMakeFeatured.rq.open( "GET", uri, true );
    wgMakeFeatured.rq.send( "" );	
  },
 
  'onLogDownload' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;

    result = eval('('+this.responseText+')');
    var pgtext = ch(result.query.pages).revisions[0]['*'];
    var nominationRegex = "(\\|\\-\\W+\\|(?: {0,})\\[{2}Проект:Избранные статьи\\/Кандидаты\\/" + replTitle() + "\\|(?: {0,})\\d{1,2}(?: {0,})[а-я]+(?: {0,})\\]{2}(?: {0,})\\|{2}(?: {0,})\\[{2}" + replTitle() + "\\]{2}(?: {0,})\\|{2}(?: {0,})(.*?)(?: {0,})\\|{2})";
    
    if (!pgtext.match(nominationRegex)) {
    	alert('Редактирование невозможно: не найдена запрашиваемая строка в статье <Проект:Избранные статьи/Кандидаты>');
    	sendError('не найдена запрашиваемая строка в статье [[Проект:Избранные статьи/Кандидаты]]');
    	return;
    }
    var match = pgtext.match( nominationRegex );
	
	var allText = match[1];
	var endText = match[2];
	
	var text = allText.replace( '|-', '|-style="background-color:gold"');
	text = text.replace( endText, 'Статья избрана');
		
	wgMakeFeatured.newtext = pgtext.replace( allText, text);
	wgMakeFeatured.editsummary = "статья [[" + mw.config.get('wgPageName') + "]] избрана (с помощью featuredarticles.js)";
	
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=edit&title=' +
              encodeURIComponent( 'Проект:Избранные_статьи/Кандидаты' );
    var rq = "summary=" + encodeURIComponent( wgMakeFeatured.editsummary ) +
             "&text=" + encodeURIComponent( wgMakeFeatured.newtext ) +
             "&token=" + encodeURIComponent( wgMakeFeatured.edittoken );
 
    wgMakeFeatured.rq.onreadystatechange = wgMakeFeatured.onLogSaved;
    wgMakeFeatured.rq.open( "POST", uri, true );
    wgMakeFeatured.rq.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    wgMakeFeatured.rq.send( rq );
  },
 
  'onLogSaved' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    if( typeof( result.error ) != 'undefined' ) {
      alert( "Не удалось сохранить страницу: " + result.error.info );
      sendError(result.error.info + ' — в <onLogSaved>');
      return;
    } else {
    	alert('Страница <Кандидаты в избранные статьи> обновлена...');
    }
 
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=revisions&rvprop=content&rvlimit=1&titles=' +
              encodeURIComponent( 'Проект:Избранные_статьи/Список' );
    wgMakeFeatured.rq.onreadystatechange = wgMakeFeatured.onLogDownloadTwo;
    wgMakeFeatured.rq.open( "GET", uri, true );
    wgMakeFeatured.rq.send( "" );
  },
  
  'onLogDownloadTwo' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
    	
    result = eval('('+this.responseText+')');
    var pgtext = ch(result.query.pages).revisions[0]['*'];
    var nominationRegex = "(\\|\\-\\W+\\|(\\d{1,})(?:.*\\W)(\\|\\}))";
    
    if (!pgtext.match(nominationRegex)) {
    	alert('Редактирование невозможно: не найдена запрашиваемая строка в статье <Проект:Избранные статьи/Список>');
    	sendError('не найдена запрашиваемая строка в статье [[Проект:Избранные статьи/Список]]');
    	return;
    }
    var match = pgtext.match( nominationRegex );
	
	var today = '{{' + 'subst:CURRENTDAY}} {{' + 'subst:CURRENTMONTHNAMEGEN}} {{' + 'subst:CURRENTYEAR}}';
	var number = parseInt( match[2] ) + 1;
	var allText = match[1];
    var reText = "|-\n|" + number + " || [[" + mw.config.get('wgPageName') + "]] || " + wgMakeFeatured.date + " ||" + today + "<sup>[[Проект:Избранные статьи/Кандидаты/" + mw.config.get('wgPageName') + "|Обс.]]</sup> ||\n|}" ;
	
    wgMakeFeatured.newtext = pgtext.replace( '|}', reText);
	wgMakeFeatured.editsummary = "статья [[" + mw.config.get('wgPageName') + "]] избрана";
	
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=edit&title=' +
              encodeURIComponent( 'Проект:Избранные_статьи/Список' );
    var rq = "summary=" + encodeURIComponent( wgMakeFeatured.editsummary ) +
             "&text=" + encodeURIComponent( wgMakeFeatured.newtext ) +
             "&token=" + encodeURIComponent( wgMakeFeatured.edittoken );
 
    wgMakeFeatured.rq.onreadystatechange = wgMakeFeatured.onListDownload;
    wgMakeFeatured.rq.open( "POST", uri, true );
    wgMakeFeatured.rq.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    wgMakeFeatured.rq.send( rq );
  },
 
  'onListDownload' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    if( typeof( result.error ) != 'undefined' ) {
      alert( "Не удалось сохранить страницу: " + result.error.info );
      sendError(result.error.info + ' — в <onListDownload>');
      return;
    } else {
    	alert('Страница <Список избранных статей> обновлена...');
    }
	
	var now = new Date();
 	nowYear = now.getFullYear();
 	nowMonth = now.getMonth();
	
	var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=revisions&rvprop=content&rvlimit=1&titles=' +
              encodeURIComponent( 'Проект:Избранные_статьи/Кандидаты/Архив/' + wgMakeFeatured.months[nowMonth] + '_' + nowYear );		
    wgMakeFeatured.rq.onreadystatechange = wgMakeFeatured.arxivDownload;
    wgMakeFeatured.rq.open( "GET", uri, true );
    wgMakeFeatured.rq.send( "" );
  },
 
  'arxivDownload' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    var pgtext = ch(result.query.pages).revisions[0]['*'];
	
    var today = '{{' + 'subst:CURRENTDAY}} {{' + 'subst:CURRENTMONTHNAMEGEN}} {{' + 'subst:CURRENTYEAR}}';	
    var reText = "|-\n|" + wgMakeFeatured.date + " || [[Проект:Избранные статьи/Кандидаты/" + mw.config.get('wgPageName') + "|" + mw.config.get('wgPageName') + "]] || " + today + "\n|}" ;
	
	wgMakeFeatured.newtext = pgtext.replace( '|}', reText);
	wgMakeFeatured.editsummary = "статья [[" + mw.config.get('wgPageName') + "]] избрана";
	
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=edit&title=' +
              encodeURIComponent( 'Проект:Избранные_статьи/Кандидаты/Архив/' + wgMakeFeatured.months[nowMonth] + '_' + nowYear );
    var rq = "summary=" + encodeURIComponent( wgMakeFeatured.editsummary ) +
             "&text=" + encodeURIComponent( wgMakeFeatured.newtext ) +
             "&token=" + encodeURIComponent( wgMakeFeatured.edittoken );
 
    wgMakeFeatured.rq.onreadystatechange = wgMakeFeatured.onArxivDownload;
    wgMakeFeatured.rq.open( "POST", uri, true );
    wgMakeFeatured.rq.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    wgMakeFeatured.rq.send( rq );	
  },
 
  'onArxivDownload' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    if( typeof( result.error ) != 'undefined' ) {
      alert( "Не удалось сохранить страницу: " + result.error.info );
      sendError(result.error.info + ' — в <onArxivDownload>');
      return;
    } else {
    	mw.notify( 'Страница архива обновлена...' );
    }

	mw.notify( $( '<span>Статья успешно избрана. <a href="javascript:location.reload()">Перезагрузить страницу</a></span>' ), {
		type: 'success'
	} );
  },
 
  'onNominationFalse' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    if( typeof( result.error ) != 'undefined' ) {
      alert( "Не удалось сохранить страницу: " + result.error.info );
      return;
    } 	

	mw.notify( $( '<span><b>Статья не избрана!</b> Подробности можете увидеть <a href="/wiki/Обсуждение участника:Serpent Vlad#Ошибка скрипта featuredarticles.js">на этой странице</a>. <a href="javascript:location.reload()">Перезагрузить страницу</a></span>' ), {
		type: 'error'
	} );
  },
  
  'makeFeatured' : function() {
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=revisions&rvprop=content&rvlimit=1&titles=' + encodeURIComponent( mw.config.get('wgPageName') );
    this.rq = new XMLHttpRequest();
    this.rq.onreadystatechange = this.onTextDownload;
    this.rq.open( "GET", uri, true );
    this.rq.send( "" );
  }
}


var wgDeny = {
  'rq' : null,
  'newtext' : '',
  'talktext' : '',
  'editsummary' : '',
  'edittoken' : '',
  'date' : '',
  'months' : {
    '0' : 'Январь',
    '1' : 'Февраль',
    '2' : 'Март',
    '3' : 'Апрель',
    '4' : 'Май',
    '5' : 'Июнь',
    '6' : 'Июль',
    '7' : 'Август',
    '8' : 'Сентябрь',
    '9' : 'Октябрь',
    '10' : 'Ноябрь',
    '11' : 'Декабрь'
  },
  'months_to' : {
    '0' : 'Января',
    '1' : 'Февраля',
    '2' : 'Марта',
    '3' : 'Апреля',
    '4' : 'Мая',
    '5' : 'Июня',
    '6' : 'Июля',
    '7' : 'Августа',
    '8' : 'Сентября',
    '9' : 'Октября',
    '10' : 'Ноября',
    '11' : 'Декабря'
  },
 
  'addDenyTab' : function() {
    if( !document.getElementById( 'featured-candidate' ) ) return;
 
 	mw.loader.using('mediawiki.util').done( function() {
    	mw.util.addPortletLink( 'p-cactions', 'javascript:wgDeny.deny()',
                    'Отказать ИС', 'ca-deny', 'Отказать в статусе избранной' );	
 	} )
  },
 
  'onTextDownload' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    var pgtext = ch(result.query.pages).revisions[0]['*'];
    var nominationRegex = /\{{2}(?:Кандидат в избранные статьи|Хорошая статья и кандидат в избранные)\|(\d{1,2})(?: |.)([а-я]+|\d{1,2})(?: |.)(\d{4})(?:|\|[а-я]+)\}{2}/i;
    if (!pgtext.match(nominationRegex)) {
    	alert('Редактирование невозможно: нет даты (либо она неверно указана) в шаблоне кандидата в избранные статьи (смотрите руководство к скрипту)'); 
    	sendError('нет даты (либо она неверно указана) в шаблоне кандидата в избранные статьи (смотрите руководство к скрипту)');
    	return;
    }
    var match = pgtext.match( nominationRegex );

    if (/\d/.test(match[2])) { var monthNow = wgDeny.months_to[match[2] - 1]; } else { var monthNow = match[2]; }
    wgDeny.date = match[1] + ' ' + monthNow + ' ' + match[3];
    wgDeny.newtext = pgtext.replace( nominationRegex, '' );
    var today = '{{' + 'subst:CURRENTDAY}} {{' + 'subst:CURRENTMONTHNAMEGEN}} {{' + 'subst:CURRENTYEAR}}';
    
	wgDeny.talktext = '{{Сообщение ИС|' + today + '|' + mw.config.get('wgPageName') + '|Кандидат}}\n';
    wgDeny.editsummary = "Статья [[" + mw.config.get('wgPageName') + "]] отправлена на доработку (см. [[ВП:КИС]])";
    
	var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=info&intoken=edit&titles=' + encodeURIComponent( mw.config.get('wgPageName') );
    wgDeny.rq.onreadystatechange = wgDeny.onTokenDownload;
    wgDeny.rq.open( "GET", uri, true );
    wgDeny.rq.send( "" );
  },
 
  'onTokenDownload' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    wgDeny.edittoken = ch(result.query.pages).edittoken;
    if( !wgDeny.edittoken ) {
      alert( 'Редактирование невозможно' );
      return;
    }
 
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=edit&title=' + encodeURIComponent( mw.config.get('wgPageName') );
    var rq = "summary=" + encodeURIComponent( wgDeny.editsummary ) +
             "&text=" + encodeURIComponent( wgDeny.newtext ) +
             "&token=" + encodeURIComponent( wgDeny.edittoken );
 
    wgDeny.rq.onreadystatechange = wgDeny.onEditSaved;
    wgDeny.rq.open( "POST", uri, true );
    wgDeny.rq.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    wgDeny.rq.send( rq );
  },
 
  'onEditSaved' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    if( typeof( result.error ) != 'undefined' ) {
      alert( "Не удалось сохранить страницу: " + result.error.info );
      return;
    }
 
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=edit&title=' + encodeURIComponent( 'Обсуждение:' + mw.config.get('wgPageName') );
    var rq = "summary=" + encodeURIComponent( wgDeny.editsummary ) +
             "&prependtext=" + encodeURIComponent( wgDeny.talktext ) +
             "&token=" + encodeURIComponent( wgDeny.edittoken );
 
    wgDeny.rq.onreadystatechange = wgDeny.onNominationSaved;
    wgDeny.rq.open( "POST", uri, true );
    wgDeny.rq.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    wgDeny.rq.send( rq );
  },
 
  'onNominationSaved' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    if( typeof( result.error ) != 'undefined' ) {
      alert( "Не удалось сохранить страницу: " + result.error.info );
      return;
    }
 
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=revisions&rvprop=content&rvlimit=1&titles=' +
              encodeURIComponent( 'Проект:Избранные_статьи/Кандидаты' );
    wgDeny.rq.onreadystatechange = wgDeny.onLogDownload;
    wgDeny.rq.open( "GET", uri, true );
    wgDeny.rq.send( "" );
  },
 
  'onLogDownload' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;

    result = eval('('+this.responseText+')');
    var pgtext = ch(result.query.pages).revisions[0]['*'];
    var nominationRegex = "(\\|\\-\\W+\\|(?: {0,})\\[{2}Проект:Избранные статьи\\/Кандидаты\\/" + replTitle() + "\\|\\d{1,2} [а-я]+\\]{2}(?: {0,})\\|{2}(?: {0,})\\[{2}" + replTitle() + "\\]{2}(?: {0,})\\|{2}(?: {0,})(.*?)(?: {0,})\\|{2})";
    
    if (!pgtext.match(nominationRegex)) {
    	alert('Редактирование невозможно: не найдена запрашиваемая строка в статье <Проект:Избранные статьи/Кандидаты>');
    	sendError('не найдена запрашиваемая строка в статье [[Проект:Избранные статьи/Кандидаты]]');
    	return;
    }
    var match = pgtext.match( nominationRegex );
	
	var allText = match[1];
	var endText = match[2];
	
	var text = allText.replace( '|-', '|-class="shadow"');
	text = text.replace( endText, 'Отправлено на доработку');
		
	wgDeny.newtext = pgtext.replace( allText, text);
	wgDeny.editsummary = "статья [[" + mw.config.get('wgPageName') + "]] отправлена на доработку";
	
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=edit&title=' +
              encodeURIComponent( 'Проект:Избранные_статьи/Кандидаты' );
    var rq = "summary=" + encodeURIComponent( wgDeny.editsummary ) +
             "&text=" + encodeURIComponent( wgDeny.newtext ) +
             "&token=" + encodeURIComponent( wgDeny.edittoken );
 
    wgDeny.rq.onreadystatechange = wgDeny.onLogSaved;
    wgDeny.rq.open( "POST", uri, true );
    wgDeny.rq.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    wgDeny.rq.send( rq );
  },
 
  'onLogSaved' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    if( typeof( result.error ) != 'undefined' ) {
      alert( "Не удалось сохранить страницу: " + result.error.info );
      sendError(result.error.info + ' — в <onLogSaved>');
      return;
    } 
 
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=revisions&rvprop=content&rvlimit=1&titles=' +
              encodeURIComponent( 'Проект:Избранные_статьи/Кандидаты/Доработка' );
    wgDeny.rq.onreadystatechange = wgDeny.onLogDownloadTwo;
    wgDeny.rq.open( "GET", uri, true );
    wgDeny.rq.send( "" );
  },
  
  'onLogDownloadTwo' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
    	
    result = eval('('+this.responseText+')');
    var pgtext = ch(result.query.pages).revisions[0]['*'];

	var today = '{{' + 'subst:CURRENTDAY}} {{' + 'subst:CURRENTMONTHNAMEGEN}} {{' + 'subst:CURRENTYEAR}}';
    var reText = "! Основные недостатки\n|-\n| " + wgDeny.date + "\n| [[Проект:Избранные статьи/Кандидаты/" + mw.config.get('wgPageName') + "|" + mw.config.get('wgPageName') + "]]\n| " + today + "\n| '''Укажите недостатки!'''" ;
	
    wgDeny.newtext = pgtext.replace( '! Основные недостатки', reText);
	wgDeny.editsummary = "статья [[" + mw.config.get('wgPageName') + "]] отправлена на доработку";
	
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=edit&title=' +
              encodeURIComponent( 'Проект:Избранные_статьи/Кандидаты/Доработка' );
    var rq = "summary=" + encodeURIComponent( wgDeny.editsummary ) +
             "&text=" + encodeURIComponent( wgDeny.newtext ) +
             "&token=" + encodeURIComponent( wgDeny.edittoken );
 
    wgDeny.rq.onreadystatechange = wgDeny.onListDownload;
    wgDeny.rq.open( "POST", uri, true );
    wgDeny.rq.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    wgDeny.rq.send( rq );
  },
 
 'onListDownload' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    if( typeof( result.error ) != 'undefined' ) {
      alert( "Не удалось сохранить страницу: " + result.error.info );
      sendError(result.error.info + ' — в <onListDownload>');
      return;
    } 
	
	var now = new Date();
 	nowYear = now.getFullYear();
 	nowMonth = now.getMonth();
	
	var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=revisions&rvprop=content&rvlimit=1&titles=' +
              encodeURIComponent( 'Проект:Избранные_статьи/Кандидаты/Архив/' + wgDeny.months[nowMonth] + '_' + nowYear );		
    wgDeny.rq.onreadystatechange = wgDeny.arxivDownload;
    wgDeny.rq.open( "GET", uri, true );
    wgDeny.rq.send( "" );
  },
 
  'arxivDownload' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    var pgtext = ch(result.query.pages).revisions[0]['*'];
	
    var today = '{{' + 'subst:CURRENTDAY}} {{' + 'subst:CURRENTMONTHNAMEGEN}} {{' + 'subst:CURRENTYEAR}}';	
    var reText = "|-class=shadow\n|" + wgDeny.date + " || [[Проект:Избранные статьи/Кандидаты/" + mw.config.get('wgPageName') + "|" + mw.config.get('wgPageName') + "]] || Отправлена на доработку " + today + "\n|}" ;
	
	wgDeny.newtext = pgtext.replace( '|}', reText);
	wgDeny.editsummary = "статья [[" + mw.config.get('wgPageName') + "]] отправлена на доработку";
	
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=edit&title=' +
              encodeURIComponent( 'Проект:Избранные_статьи/Кандидаты/Архив/' + wgDeny.months[nowMonth] + '_' + nowYear );
    var rq = "summary=" + encodeURIComponent( wgDeny.editsummary ) +
             "&text=" + encodeURIComponent( wgDeny.newtext ) +
             "&token=" + encodeURIComponent( wgDeny.edittoken );
 
    wgDeny.rq.onreadystatechange = wgDeny.onArxivDownload;
    wgDeny.rq.open( "POST", uri, true );
    wgDeny.rq.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
    wgDeny.rq.send( rq );	
  },
 
  'onArxivDownload' : function() {
    if( this.readyState != 4 ) return;
    if( this.status != 200 ) return;
 
    result = eval('('+this.responseText+')');
    if( typeof( result.error ) != 'undefined' ) {
      alert( "Не удалось сохранить страницу: " + result.error.info );
      sendError(result.error.info + ' — в <onArxivDownload>');
      return;
    }

	mw.notify( $( '<span>Статья успешно отравлена на доработку. <a href="javascript:location.reload()">Перезагрузить страницу</a></span>' ) );
  },
 
  'deny' : function() {
    var uri = mw.config.get('wgServer') + mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=revisions&rvprop=content&rvlimit=1&titles=' + encodeURIComponent( mw.config.get('wgPageName') );
    this.rq = new XMLHttpRequest();
    this.rq.onreadystatechange = this.onTextDownload;
    this.rq.open( "GET", uri, true );
    this.rq.send( "" );
  }
}

mw.loader.using( 'mediawiki.notification' ).done( function () {
	if ( isOfficer() ) {
		wgMakeFeatured.addMakeFeaturedTab();
		wgDeny.addDenyTab();
	}
} );
Prefix: a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9

Portal di Ensiklopedia Dunia

Kembali kehalaman sebelumnya