// Скрипт для упрощённой подстановки шаблонов.// Для установки, добавьте в свой common.js строку importScript('у:Megitsune-chan/subst.js');// Поле "Дополнительные параметры" можно использовать например для указания причин или пояснений.// Для предложения добавить шаблоны в скрипт, обращайтесь на страницу обсуждения Участницы Megitsune-chan.sigWarning = true;subst = {$reason: null,$token: null,$rev: null, $reasons: [ { tmpl: 'автобиография', reason: 'Автобиография', ns: 0 },{ tmpl: 'аффилированные источники', reason: 'Аффилированные источники', ns: 0 },{ tmpl: 'грубый перевод', reason: 'Грубый перевод', ns: 0 },{ tmpl: 'дописать', reason: 'Дописать', ns: 0 },{ tmpl: 'значимость', reason: 'Значимость', ns: 0 },{ tmpl: 'неавторитетные источники', reason: 'Неавторитетные источники', ns: 0 },{ tmpl: 'недостаточно критики', reason: 'Недостаточно критики', ns: 0 },{ tmpl: 'нет источников', reason: 'Нет источников', ns: 0 },{ tmpl: 'нет сносок', reason: 'Нет сносок', ns: 0 },{ tmpl: 'неэнциклопедично', reason: 'Неэнциклопедично', ns: 0 },{ tmpl: 'орисс', reason: 'Орисс', ns: 0 },{ tmpl: 'плохой перевод', reason: 'Плохой перевод - в доп. параметрах указывайте «язык|Название на оригинале»', ns: 0 },{ tmpl: 'Пресс-релиз', reason: 'Пресс-релиз', ns: 0 },{ tmpl: 'редактирую', reason: 'Редактирую', ns: 666 },{ tmpl: 'Резюме', reason: 'Резюме', ns: 0 },{ tmpl: 'реклама', reason: 'Реклама', ns: 0 },{ tmpl: 'стиль статьи', reason: 'Стиль статьи', ns: 0 },{ tmpl: 'чистить', reason: 'Чистить', ns: 0 },{ tmpl: 'Ds-author', reason: 'К отсроченному удалению автором', ns: 666  },{ tmpl: 'помочь', reason: 'Инкубатор, Прошу помочь', ns: 102 && 103 },{ tmpl: 'проверить', reason: 'Инкубатор, Прошу проверить', ns: 102 && 103 },], initialise: function() {var $window = '<div xmlns="http://www.w3.org/1999/xhtml" id="subst-window" style="background: white; border:1px double black;'+'position: fixed; top: 140px; left: 180px; z-index: 2; width: 750px; height: 450px; padding: 2 2 2 3em">' +'<form name="subst" id="subst" style="height: 450px"><div style="height: 450px; overflow: auto"><p>'+'<span style="font-weight:bold">Выберите шаблон для подстановки в статью</span></p>';for( var $i in this.$reasons ) {var controlID = "subst-radiobutton" + $i;if( this.$reasons[$i].ns == 666 || this.$reasons[$i].ns == mw.config.get('wgNamespaceNumber') ) {$window += '<p><input class="subst-autofocus" type="radio" id="' + controlID + '" name="subst" value="' + $i + '" />'+ '<label class="subst-autofocus" for="' + controlID + '">' + this.$reasons[$i].reason + '</label>' +( this.$reasons[$i].ni ? ': <input id="subst-field' + $i + '" />' : '' ) + '</p>';}}$window += '</div></form><div style="background: white"><p>Дополнительные параметры (не обязательно): <input type="text" id="subst-neob" size="70" value="" /></p>'+'<input type="checkbox" id="subst-forcewrap" />Обернуть шаблон в тег &lt;noinclude&gt;'+' (<a href="//ru.wikipedia.org/wiki/user:Megitsune-chan/subst.js" target="_blank">?</a>)</div>' +'<div style="background: white"><input type="button" id="subst-confirm" value="Отправить" /><input type="button" id="subst-cancel"'+' value="Отмена" /></div></div>';$( '#bodyContent' ).append( $.parseXML( $window ).firstChild );$( '#subst-confirm' )[0].onclick = function() { subst.execute() };$( '.subst-autofocus' ).click( function() { $( "#subst-confirm" ).focus() } );$( '#subst-cancel' )[0].onclick = function() { $( 'div#subst-window' ).remove() };}, execute: function() {if( !( this.$reason = $( "#subst input:checked" ).val() ) ) {alert( 'Вы не выбрали шаблон!' );return 1;}$.getJSON( mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=info&titles=Foobar&meta=tokens&type=csrf', function( $x ) { subst.template( $x ) });}, template: function( $data ) {if( !$data || !$data['query'] ) {return;}this.$token = $data['query']['tokens']['csrftoken']; $.getJSON( mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=revisions&titles=' + subst._ae(mw.config.get('wgPageName')) + '&rvprop=user|content&rvlimit=1', function( $data ) {for( var $rev in $data['query']['pages'] ) {if( typeof $data['query']['pages'][$rev]['revisions'] == 'undefined' ) { alert( 'Страница удалена или скрипт неправильно обработал её название.' ); return false; } $content = $data['query']['pages'][$rev]['revisions'][0]['*'];if( $content.match( '/{{subst-' + subst.$reasons[subst.$reason].tmpl + '/ig' ) ) {alert( 'На странице уже стоит выбранный шаблон.' ); return false; } var $template = (($('#subst-forcewrap').is(':checked') || mw.config.get('wgNamespaceNumber') == 10) ? '<' + 'noinclude>' : '') + '{{' + ( subst.$reasons[subst.$reason].ds ? 'sub' + 'st:ds' : 'subst') + ( ( subst.$reasons[subst.$reason].tmpl == '' ) ? '' : ':' +subst.$reasons[subst.$reason].tmpl ) + ( subst.$reasons[subst.$reason].ni ? '|1=' + $( "#subst-field" + subst.$reason ).val() :( $("#subst-neob").val() != "" ? "|" + $("#subst-neob").val() : "" )) + '}}' +(($('#subst-forcewrap').is(':checked') || mw.config.get('wgNamespaceNumber') == 10) ? '<' + '\/noinclude>' : '') +'\n';$.post( mw.config.get('wgScriptPath') + '/api.php', { action: 'edit', title: mw.config.get('wgPageName'), summary: 'Подстановка шаблона {{' +( subst.$reasons[subst.$reason].ds ? 'ds' : '') + ( ( subst.$reasons[subst.$reason].tmpl == '' ) ? '' : '[[Шаблон:' + subst.$reasons[subst.$reason].tmpl + '|' + subst.$reasons[subst.$reason].tmpl ) +']]}} с помощью [[user:Megitsune-chan/subst.js|subst.js]]', token: subst.$token, notminor: '1', text: $template + $content, format: 'json' },function( $x ) { subst.finalf( $x ) });}});}, finalf: function( $data ) {this.$rev = $data['edit']['newrevid'];if( $('#subst-warn').is(':checked') && subst.$reasons[subst.$reason].warn ) {$.getJSON( mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&rvdir=newer&prop=revisions&titles=' + subst._ae(mw.config.get('wgPageName')) + '&rvprop=user|content&rvlimit=1', function( $x ) {for( var $rev in $x['query']['pages'] ) {var $talk = 'Обсуждение_участника:' + $x['query']['pages'][$rev]['revisions'][0]['user'];$.post( mw.config.get('wgScriptPath') + '/api.php', { action: 'edit', appendtext: '\n{{subst:' + subst.$reasons[subst.$reason].warn +( ( subst.$reasons[subst.$reason].tmpl == 'copyvio' ) ? '|1=' + subst._sp(mw.config.get('wgPageName')) + '|2=' + $( "#subst-field" + subst.$reason ).val() : ( ( subst.$reasons[subst.$reason].tmpl == 'vand' ) ? '' : '|1=' + subst._sp(mw.config.get('wgPageName') ) ) ) + '}}' +'\n~~' + '~~', summary: ' ', title: $talk, token: subst.$token, notminor: '1' },function() { subst.review() });}});    } else { subst.review() }}, review: function( $data ) {window.location = mw.config.get('wgServer') + '/wiki/' + encodeURIComponent( mw.config.get('wgPageName') );}, _ae: function( $i ) {                return $i.replace(/\+/g,'%2B').replace(/&/g,'%26');        },_sp: function( $i ) {                return $i.replace(/\+/g,'%2B').replace(/&/g,'%26').replace(/_/g, ' ');        },}; // Если мы не на служебной странице, не на странице файла (для него отдельный гаджет), а на существующей странице, которую можно править, добавляет вкладку$( function() {if( mw.config.get('wgCanonicalNamespace') != 'Special' && mw.config.get('wgCanonicalNamespace') != 'File' && $("#ca-viewsource").length == 0 && mw.config.get('wgArticleId') ) {mw.loader.using('mediawiki.util').done(function(){mw.util.addPortletLink("p-cactions", "javascript: subst.initialise()", "Подстановка", "ca-subst", "Подстановка шаблонов");});}});