Участник:Absconditus/afi.js
Перейти к навигации
Перейти к поиску
Страница персонального оформления. У этого JS-кода есть документация: Участник:Absconditus/afi.
После сохранения очистите кэш браузера.
После сохранения очистите кэш браузера.
/*
* Скрипт для упрощенного вынесения на улучшение статьи в Википедии: добавляет шаблон на страницу, создаёт тему на КУЛ.
* Документация: https://ru.wikipedia.org/wiki/Участник:Absconditus/afi
* Лицензия: GNU GPL
* Версия: 1.0 06.05.2012
* Автор — Absconditus, скрипт сделан путём незначительной переделки rfd.js
*/
afi = {
$token: null,
$reason: null,
afiPageExists: null,
insert_tag: function(text) {
var textbox = $( "#afi-reason" );
textbox.textSelection( 'encapsulateSelection', { 'pre' : text } );
},
show_window: function() {
var $window = '<div xmlns="http://www.w3.org/1999/xhtml" id="afi-window" style="background: white; border:1px double black; padding: 15px; position: fixed; top: 200px; left: 200px; z-index: 2"><table>' +
'<tr><td>Страница AfI:</td><td>' + this._afi_page() + '</td></tr>' +
'<tr><td>Страница:</td><td>' + this._xe( mw.config.get('wgPageName') ) + '</td></tr>' +
'<tr><td>Быстрая вставка:</td><td style="font-size:90%">' + '<a onclick="afi.insert_tag(\'|\');return false" href=\"#\">|</a> <a onclick="afi.insert_tag(\'[[ВП:ОКЗ]]\');return false" href=\"#\">[[ВП:ОКЗ]]</a> <a onclick="afi.insert_tag(\'[[ВП:ЧНЯВ]]\');return false" href=\"#\">[[ВП:ЧНЯВ]]</a> <a onclick="afi.insert_tag(\'[[ВП:МТФ]]\');return false" href=\"#\">[[ВП:МТФ]]</a> <a onclick="afi.insert_tag(\'[[ВП:МТМР]]\');return false" href=\"#\">[[ВП:МТМР]]</a> <a onclick="afi.insert_tag(\'[[ВП:НЕГУЩА]]\');return false" href=\"#\">[[ВП:НЕГУЩА]]</a> <a onclick="afi.insert_tag(\'[[ВП:ПРОВ]]\');return false" href=\"#\">[[ВП:ПРОВ]]</a> <a onclick="afi.insert_tag(\'[[ВП:БИО]]\');return false" href=\"#\">[[ВП:БИО]]</a> <a onclick="afi.insert_tag(\'[[ВП:АИ]]\');return false" href=\"#\">[[ВП:АИ]]</a></td></tr>' +
'<tr><td>Причина</td><td>' + '<textarea id="afi-reason" rows="4" cols="60"></textarea></td></tr>' +
'<tr><td></td><td><input type="checkbox" id="afi-replace-sd-tmpl" />Перенести с быстрого (<a href="//ru.wikipedia.org/wiki/user_talk:Absconditus/afi.js\#Описание_работы_скрипта" target="_blank">?</a>)</td></tr>' +
'<tr><td></td><td><input type="checkbox" id="afi-forcewrap" />Принудительно обернуть шаблон в тег <noinclude> (<a href="//ru.wikipedia.org/wiki/user_talk:Absconditus/afi.js\#Описание_работы_скрипта" target="_blank">?</a>)</td></tr>' +
'<tr><td><input type="button" id="afi-confirm" value="ОК" /><input type="button" id="afi-cancel" value="Отмена" />' +
'</td></tr></table></div>';
$( '#bodyContent' ).append( $.parseXML( $window ).firstChild );
$( '#afi-confirm' )[0].onclick = function() { afi.execute() };
$( '#afi-cancel' )[0].onclick = function() {
$( 'div#afi-window' ).remove();
};
},
execute: function() {
this.$reason = $( '#afi-reason' ).val();
var titleParam = encodeURIComponent( this._afi_page() )
$.getJSON( mw.config.get('wgScriptPath') + '/api.php?format=json&action=query&prop=info&intoken=edit&titles=' + titleParam, function( $x ) { afi.process_page( $x ) });
},
process_page: function( $data ) {
for( var $i in $data['query']['pages'] ) {
this.$token = $data['query']['pages'][$i]['edittoken'];
this.afiPageExists = $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 = (($('#afi-forcewrap').is(':checked')) ? '<' + 'noinclude>' : '') + '{' + '{subst:afid}}\n' + (($('#afi-forcewrap').is(':checked')) ? '<' + 'noinclude>' : '');
$.post( mw.config.get('wgScriptPath') + '/api.php', { action: 'edit', title: mw.config.get('wgPageName'), minor: 1, watchlist: 'watch', summary: (($('#afi-replace-sd-tmpl').is(':checked')) ? 'С быстрого удаления на' : 'Страница вынесена на') + ' улучшение: [[' + afi._afi_page() + '#' + mw.config.get('wgPageName') + '|тема]] ([[user talk:Absconditus/afi.js|AfI.js]])',
token: afi.$token, text: (($('#afi-replace-sd-tmpl').is(':checked')) ? $content.replace(/\{\{db-.*\}\}/ig, $template) : $template + $content), basetimestamp: afi._ts(), format: 'json' }, function( $x ) { afi.process_afi( $x ) });
});
},
process_afi: function( $data ) {
if( $data['edit']['result'] == 'editconflict' ) { alert( 'Конфликт правок. Запустите скрипт ещё раз.' ); return false }
var $h2 = mw.config.get('wgPageName').replace( /_/g, ' ' );
var $n = '\n\n== [[' + ( ( mw.config.get('wgNamespaceNumber') == 14 || mw.config.get('wgNamespaceNumber') == 6 ) ? ':' : '' ) + $h2 + ']] ==\n'+ (($('#afi-replace-sd-tmpl').is(':checked')) ? 'С быстрого удаления.<br>' : '') + afi.$reason + ' — ~~' + '~~';
$.post( mw.config.get('wgScriptPath') + '/api.php', { action: 'edit', title: afi._afi_page(), minor: 1, summary: (($('#afi-replace-sd-tmpl').is(':checked')) ? 'с быстрого удаления ' : '') + '\/*' + mw.config.get('wgPageName') + '*\/ новая тема (с помощью [[user talk:Absconditus/afi.js|AfI.js]])', token: afi.$token, appendtext: (!afi.afiPageExists ? '\{\{ВПКУЛ-Навигация\}\}' : '') + $n }, function() { window.location = mw.config.get('wgServer') + '/wiki/' + afi._afi_page() + '#' + mw.config.get('wgPageName') });
},
_afi_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();
return $d.getUTCFullYear()+'-'+($d.getUTCMonth()+1)+'-'+$d.getUTCDate()+'T'+$d.getUTCHours()+':'+$d.getUTCMinutes()+':'+$d.getUTCSeconds()+'Z';
},
_months: [ 'января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря' ]
}
$( function() {
if( mw.config.get('wgCanonicalNamespace') != 'Special' && mw.config.get('wgArticleId') && $('#ca-viewsource').length == 0) {
mw.loader.using('mediawiki.util').done(function(){
mw.util.addPortletLink("p-cactions", "javascript: afi.show_window()", "КУЛ", "ca-afi", "Вынести на улучшение");
});
}
});
mw.loader.load( 'jquery.textSelection', 'text/javascript', false );