/*
* Скрипт для ВП:КИС
* Инструкция — Участник: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( 'Сообщение об ошибке в работе скрипта избрания КИС' ) +
"§ion=" + encodeURIComponent( 'new' ) +
"§iontitle=" + 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();
}
} );