/*
* Скрипт для упрощенного вынесения на переименование статьи в Википедии: добавляет шаблон на страницу, создаёт тему на КПМ.
* Лицензия: GNU GPL
* На базе rfd.js, автор которого — анонимный разработчик (связь с ним — xzs.jx@yandex.ru)
*/
kpm = {
$token: null,
$reason: null,
kpmPageExists: null,
show_window: function() {
var $window = '<div xmlns="http://www.w3.org/1999/xhtml" id="kpm-window" style="background: white; border:1px double black; padding: 15px; position: fixed; top: 200px; left: 200px; z-index: 2"><table>' +
'<tr><td>Страница для переименования:</td><td>' + this._xe( mw.config.get('wgPageName') ) + '</td></tr>' +
'<tr><td>Предлагаемое название (-ия):</td><td><input type="text" id="kpm-new-page-name" size="60" /></td></tr>' +
'<tr><td><small>Текущая подстраница КПМ:</small></td><td><small>' + this._kpm_page() + '</small></td></tr>' +
'<tr><td>Причина:</td><td>' + '<textarea id="kpm-reason" rows="4" cols="60"></textarea></td></tr>' +
/* '<tr><td></td><td><input type="checkbox" id="kpm-non-standart-heading" />Нестандартное название секции (<a href="//ru.wikipedia.org/wiki/user_talk:Absconditus/kpm.js\#Описание_работы_скрипта" target="_blank">?</a>)</td></tr>' + */
'<tr><td></td><td><input type="checkbox" id="kpm-forcewrap" />Принудительно обернуть шаблон КПМ в тег <noinclude> (<a href="//ru.wikipedia.org/wiki/user_talk:Absconditus/kpm.js\#Описание_работы_скрипта" target="_blank">?</a>)</td></tr>' +
'<tr><td><input type="button" id="kpm-confirm" value="ОК" /><input type="button" id="kpm-cancel" value="Отмена" />' +
'</td></tr></table></div>';
$( '#bodyContent' ).append( $.parseXML( $window ).firstChild );
$( '#kpm-confirm' )[0].onclick = function() { kpm.execute() };
$( '#kpm-cancel' )[0].onclick = function() {
$( 'div#kpm-window' ).remove();
};
},
execute: function() {
this.$reason = $( '#kpm-reason' ).val();
var titleParam = encodeURIComponent( this._kpm_page() )
$.getJSON( mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=info&intoken=edit&titles=' + titleParam, function( $x ) { kpm.process_page( $x ) });
},
process_page: function( $data ) {
for( var $i in $data['query']['pages'] ) {
this.$token = $data['query']['pages'][$i]['edittoken'];
this.kpmPageExists = $data.query.pages[$i].missing == undefined;
}
$.getJSON( mw.config.get('wgScriptPath') + '/api.php?format=json&action=parse&page=' + this._ae(mw.config.get('wgPageName')) + '&prop=wikitext', function( $data ) {
if( typeof $data['parse'] == 'undefined' ) { alert( 'Статья уже не существует.' ); return false }
var $content = $data['parse']['wikitext']['*'];
if( $content.match( /{{к переименованию/ig ) ) { alert( 'На статье уже стоит шаблон «к переименованию».' ); return false }
var $template = (($('#kpm-forcewrap').is(':checked')) ? '<' + 'noinclude>' : '') + '{' + '{subst:перелить|'+$('#kpm-new-page-name').val()+ '}}\n' + (($('#kpm-forcewrap').is(':checked')) ? '<' + '/noinclude>' : '');
$.post( mw.config.get('wgScriptPath') + '/api.php', { action: 'edit', title: mw.config.get('wgPageName'), minor: 0, watchlist: 'watch', summary: 'Страница вынесена на переименование: [[' + kpm._kpm_page() + '#' + mw.config.get('wgPageName') + ' > ' + $('#kpm-new-page-name').val() + '|тема]] ([[user talk:Absconditus/kpm.js|kpm.js]])', token: kpm.$token, text: $template + $content, basetimestamp: kpm._ts(), format: 'json' }, function( $x ) { kpm.process_kpm( $x ) });
});
},
process_kpm: function( $data ) {
if( $data['edit']['result'] == 'editconflict' ) { alert( 'Конфликт правок. Запустите скрипт ещё раз.' ); return false }
var $h2 = '[[' + mw.config.get('wgPageName').replace( /_/g, ' ' ) + ']] > [[' + $('#kpm-new-page-name').val().replace( /_/g, ' ' ) + ']]';
var $n = '\n\n== ' + $h2 + ' ==\n'+ kpm.$reason + ' — ~~' + '~~';
$.post( mw.config.get('wgScriptPath') + '/api.php', { action: 'edit', title: kpm._kpm_page(), minor: 0, summary: '\/* [[' + mw.config.get('wgPageName') + ']] > [[' + $('#kpm-new-page-name').val() + ']] *\/ новая тема (с помощью [[user talk:Absconditus/kpm.js|kpm.js]])', token: kpm.$token, appendtext: (!kpm.kpmPageExists ? '\{\{ВПКПМ-Навигация\}\}' : '') + $n }, function() { window.location = mw.config.get('wgServer') + '/wiki/' + kpm._kpm_page() + '#' + mw.config.get('wgPageName') + '_>_' + $('#kpm-new-page-name').val() });
},
_kpm_page: function() {
var $date = new Date();
return this._xe( 'Википедия:К_переименованию/' + $date.getUTCDate() + ' ' + ( this._months[$date.getUTCMonth()] ) +
' ' + $date.getUTCFullYear() );
},
_xe: function( $i ) {
return $i.replace(/\&/g,'&'+'amp;').replace(/</g,'&'+'lt;')
.replace(/>/g,'&'+'gt;').replace(/\'/g,'&'+'apos;').replace(/\"/g,'&'+'quot;');
},
_ae: function( $i ) {
return $i.replace(/\+/g,'%2B').replace(/&/g,'%26');
},
_ts: function() {
var $d = new Date();
var $m = $d.getUTCMonth()+1;
return $d.getUTCFullYear()+'-'+($m<10?'0'+$m:$m)+'-'+$d.getUTCDate()+'T'+$d.getUTCHours()+':'+$d.getUTCMinutes()+':'+$d.getUTCSeconds()+'Z';
},
_months: [ 'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря' ]
}
$.when(mw.loader.using('mediawiki.util'), $.ready).done(function() {
if( mw.config.get('wgCanonicalNamespace') != 'Special' && mw.config.get('wgArticleId') && $('#ca-viewsource').length == 0) {
mw.util.addPortletLink("p-cactions", "javascript: kpm.show_window()", "КПМ", "ca-kpm", "Вынести на переименование");
}
});