Участник:Absconditus/cps.js
Перейти к навигации
Перейти к поиску
Страница персонального оформления. У этого JS-кода есть связанный CSS-файл: Участник:Absconditus/cps.css.
После сохранения очистите кэш браузера.
После сохранения очистите кэш браузера.
/*cps (Боевой Патрульный Самокат) — автор (пардон за оффенс) lurk<!---->more.to/user:Хикки-задрот ; адаптация: http://ru.wikipedia.org/wiki/user:Absconditus
Документация: [[user_talk:Absconditus/cpsjs]] */
//<source lang="javascript">
var cpsLoaderHtml = '<center><img src="//upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif"></img></center>';
var cpsBarHtml = '\
<div id="cpsControl">\
<div>\
<button id="cpsClear" onclick="cpsClear()" title="Очистить поле для комментария.">Очистить</button>\
<span class="cpsNoDiff">\
<button id="cpsUp" onclick="cpsUp()" title="Переход к предыдущей ссылке на дифф.">▲</button>\
<button id="cpsDown" onclick="cpsDown()" title="Переход к следующей ссылке на дифф.">▼</button>\
<button id="cpsLeft" onclick="cpsLeft()" title="Переход к предыдущей правке в этой статье.">◄</button>\
<button id="cpsRight" onclick="cpsRight()" title="Переход к следующей правке в этой статье.">►</button>\
<button id="cpsKick" onclick="cpsKick()" title="Повторная загрузка этого диффа.">Пнуть</button>\
</span>\
<button id="cpsUndo" onclick="cpsUndo()" title="Будут откачены все изменения, внесённые после этой правки! Дождитесь зелёного цвета для завершения!">Откатить</button>\
<button id="cpsReview" onclick="cpsReview()" title="Отпатрулировать эту версию статьи (при откате правки перейдите сперва на последнюю версию статьи, иначе отпатрулирована будет откаченная!). В качестве комментария к досмоту будет использован текст нижеследующего поля. Дождитесь зелёного цвета для завершения!">Д0СМ0Т</button>\
<button id="cpsReport" onclick="cpsShowReportReason()" title="Подать запрос на ЗКА/УЗ. В качестве заголовка и текста запроса будет указан текст из двух следующих ниже полей. Дождитесь зелёного цвета для завершения!">Настучать</button>\
<button id="cpsBlock" onclick="cpsBlock()" class="cpsSysop" title="Заблокировать участника. Дождитесь зелёного цвета для завершения!">Бан</button>\
<button id="cpsBlockMessage" onclick="cpsShowBlockMessage()" class="cpsSysop" title="Оставить сообщение о блокировке на СО заблокированного">Сообщение о блокировке</button>\
<button id="cpsWarn" onclick="cpsShowWarnBox()" title="Предупредить участника. Дождитесь зелёного цвета для завершения!">Warn</button>\
<button id="cpsClose" onclick="cpsHide()" style="align:right; float:right" title="Нажмите на эту кнопку, чтобы закрыть окно">X</button>\
</div>\
<div id="cpsBlockReasonBox" style="display: none">\
<input id="cpsBlockMessageExpiry" class="cpsSysop" type="text" style="width:20%">\
<input id="cpsBlockMessageRule" class="cpsSysop" type="text" style="width:30%">\
<input id="cpsBlockMessageAdditional"class="cpsSysop" type="text" style="width:40%">\
<input type="button" id="cpsBlockMessageConfirm" onclick="cpsBlockMessage()" class="cpsSysop" value="ОК" style="width:10%" />\
</div>\
<div id="cpsWarnBox" style="display: none">\
Шаблон: \
<select id="cpsWarnTmpl" style="width:25%">\
<option value="Предупреждение">Шаблон «Предупреждение»</option>\
<option value="Архивируйте">Архивируйте</option>\
<option value="Вандализм">Вандализм</option>\
<option value="Ваше имя">Ваше имя</option>\
<option value="Внимание-копивио">Внимание-копивио</option>\
<option value="Машперевод">Машперевод</option>\
<option value="Не на русском">Не на русском</option>\
<option value="Нецелевая ЛС">Нецелевая ЛС</option>\
<option value="Предупреждение-ЛС участника">Предупреждение-ЛС участника</option>\
<option value="Предупреждение-удаление текста">Предупреждение-удаление текста</option>\
<option value="Рекламный ник">Рекламный ник</option>\
<option value="Спам">Спам</option>\
<option value="Спам-статья">Спам-статья</option>\
<option value="СпасибоКоротко">СпасибоКоротко</option>\
<option value="СпасибоНезначимо">СпасибоНезначимо</option>\
<option value="Тест">Тест</option>\
<option value="Нарушение АП">Нарушение АП</option>\
<option value="3О">3 отката</option>\
</select>\
<input id="cpsWarn1stParameter" type="text" style="width:25%">\
<input id="cpsWarn2ndParameter" type="text" style="width:25%">\
<input id="cpsWarnConfirm" type="button" onclick="cpsWarn()" value="ОК" style="width:10%" />\
</div>\
<input id="wpSummary" type="text" style="width:90%">\
<div id="cpsReportReasonBox" style="display: none; vertical-align:top">\
Страница: \
<select id="cpsReportChoosePage" width="10%">\
<option value="Википедия:Запросы к администраторам">ЗКА</option>\
<option value="Википедия:Установка защиты">УЗ</option>\
</select>\
<textarea id="cpsReportReason" rows="5" cols="30" width="30%" align="center" placeholder="Введите сюда текст запроса."></textarea>\
<input type="button" id="cpsReportConfirm" onclick="cpsReport()" value="ОК" style="width:10%" />\
</div>\
<div id="userSummaryButtonsA"></div>\
<select id="mw-input-wpReason" class="cpsSysop"></select>\
<select id="mw-input-wpExpiry" class="cpsSysop"></select>\
</div>\
<div id="cpsHeader" class="cpsLoader cpsNoDiff"></div>\
<div id="cpsContent">\
<div id="cpsDiff" class="cpsLoader"></div>\
<div id="cpsList" class="cpsSysop cpsLoader">' + cpsLoaderHtml + '</div>\
</div>';
var cpsEmbedHtml = '\
<div id="cps">\
<div id="cpsEmbed">' + cpsBarHtml + '</div>\
</div>';
var cpsFrameHtml = '\
<div id="cps" style="display:none">\
<div id="cpsBackground" onclick="cpsHide()" title="УБРАТЬ"></div>\
<div id="cpsBar">' + cpsBarHtml + '</div>\
</div>';
var cpsHeaderHtml = '\
<p><a id="cpsTitle"></a> (<a id="cpsDiffLink" title="Дифф">Дифф</a> | <a id="cpsNewRev" title="Версия">Версия</a> | <a id="cpsHistory" title="История">История</a> | <a id="cpsEdit" title="Править">Править</a>)</p>\
<p><i id="cpsTime"></i>: <a id="cpsUser" title="Страница участника"></a> (<a id="cpsTalk" title="Обсуждение участника">Обс.</a> | <a id="cpsContribution" title="Вклад участника">Вклад</a> | <a id="cpsBlockLog" title="Блокировки">Блокировки</a>)</p>\
<p><i id="cpsComment"></i></p>';
var cpsWorkspace = /diff=\w+|=edit|=submit|=history/gi;
var cpsWorkspace2 = /:contributions|:recentchanges|:watchlist|:checkuser|:список|:свежие|:вклад|:связанные/gi;
var cpsSummary = '';
var cpsLinks = [];
var cpsSysop = false;
var cpsToken = undefined;
var cpsHref = undefined;
var cpsTitle;
var cpsRevid;
var cpsPrev;
var cpsNext;
var cpsUser;
var cpsComment;
var cpsTime;
var cpsBlocked = true;
var cpsLink;
function cpsDisable(selector) { $(selector).prop('disabled', true); }
function cpsEnable(selector) { $(selector).prop('disabled', false); }
function cpsSuccess(id) { return function (xml) { if ($('error', $(xml).text())[0]) { $(id).css('background-color', 'red'); cpsErrorInfo = xml; } else $(id).css('background-color', 'lime'); } }
function cpsParseHref(href, name) {
if (href) {
var value = href.match(RegExp(name + '=([^&]+)'));
if (value) return value[1];
}
return undefined;
}
function cpsHideAll() { $('.cpsSummaryItem').toggle(); $('#cpsEmbed, .cpsOldLink, .cpsLink').toggle(); }
function cpsHide() { $('#column-one, .portlet').show(); $('#cps').fadeOut(); }
function cpsKick() { cpsQueryDiff(cpsHref); }
function cpsClear() { $('#wpSummary').attr('value', ''); $('.cpsSummaryItem').attr('class', 'cpsSummaryItem'); }
function cpsUp() { cpsLinks[cpsLink - 1].click(); }
function cpsDown() { cpsLinks[cpsLink + 1].click(); }
function cpsLeft() { cpsQueryDiff(cpsPrev); }
function cpsRight() { cpsQueryDiff(cpsNext); }
function cpsUndo() {
cpsDisable('#cpsUndo');
$.get('/w/api.php', { titles: cpsTitle, action: 'query', prop: 'info', format: 'xml' }, function (xml) {
$.post('/w/api.php', { action: 'edit', title: cpsTitle, token: cpsToken, summary: '[[user talk:Absconditus/cps.js|cps.js]]: отмена правки ' + cpsRevid + ': ' + $('#wpSummary').attr('value'), undo: cpsParseHref(cpsPrev, 'oldid'), undoafter: $('page', $(xml).text()).attr('lastrevid'), minor: '1' }, cpsSuccess('#cpsUndo'));
});
}
function cpsReview() {
$.post('/w/api.php', { action: 'review', revid: cpsRevid, token: cpsToken, comment: '(с помощью [[user talk:Absconditus/cps.js|cps.js]])' + ($('#wpSummary').attr('value') ? ' ' + $('#wpSummary').attr('value') : '')}, cpsSuccess('#cpsReview'));
}
function cpsReport() {
cpsDisable('#cpsReport');
$.post('/w/api.php', { action: 'edit', title: $('#cpsReportChoosePage').attr('value'), token: cpsToken, summary: '\/*' + ($('#cpsReportChoosePage').attr('value') == 'Википедия:Запросы к администраторам' ? $('#wpSummary').attr('value') : cpsTitle) +'*\/ новая тема ([[user talk:Absconditus/cps.js|cps.js]])', section: '0', appendtext: '\n== ' + $('#wpSummary').attr('value') + ' ==\n\{\{' + ($('#cpsReportChoosePage').attr('value') == 'Википедия:Запросы к администраторам' ? 'userlinks' : 'pagelinks') + '|' + ($('#cpsReportChoosePage').attr('value') == 'Википедия:Запросы к администраторам' ? cpsUser : cpsTitle) + '}}<br/>' + $('#cpsReportReason').attr('value') + ' — ~~' + '~~', minor: '1' }, cpsSuccess('#cpsReport'));
}
function cpsBlock() {
cpsDisable('#cpsBlock');
$.post('/w/api.php', { action: 'block', user: cpsUser, token: cpsToken, expiry: $('#mw-input-wpExpiry option:selected').attr('value'), reason: $('#mw-input-wpReason option:selected').attr('value') + ($('#wpSummary').attr('value') ? ': ' : '') + $('#wpSummary').attr('value'), nocreate: '1', autoblock: '1' }, cpsSuccess('#cpsBlock'));
}
function cpsBlockMessage() {
$.post( mw.config.get('wgScriptPath') + '/api.php', {
action: 'edit',
appendtext: '\n== Блокировка \{\{subst:CURRENTDAY\}\}.\{\{subst:CURRENTMONTH\}\}.\{\{subst:CURRENTYEAR\}\} ==\n{{Блокировка|1=' + $('#cpsBlockMessageExpiry').val() + '|2=' + $('#cpsBlockMessageRule').val() + '}}\n' + $('#cpsBlockMessageAdditional').val() + '~~' + '~~',
summary: 'Сообщение о блокировке участника с пом��щью [[user talk:Absconditus/cps.js|cps.js]]',
title: 'User_talk:' + cpsUser,
token: cpsToken
}, cpsSuccess('#cpsBlockMessageConfirm') );
}
function cpsQueryDiff(href) {
if (href) {
cpsHref = href;
$('.cpsLoader').html(cpsLoaderHtml);
$('#column-one, .portlet').hide();
$('#cps').fadeIn();
cpsDisable('#cps *:not(#cpsKick)');
$.get(href + '&action=render&diffonly=1', function (xml) {
$('#cpsHeader').html(cpsHeaderHtml);
$('#cpsDiff').html($('.diff, .firstrevisionheader', $('<div>' + xml + '</div>')));
cpsParseDiff();
});
}
}
function cpsParseDiff() {
cpsTitle = decodeURIComponent(cpsParseHref($('#differences-nextlink, #differences-prevlink').attr('href'), 'title'));
cpsRevid = cpsParseHref($('#mw-diff-ntitle1 a:first, #differences-nextlink').attr('href'), 'oldid');
cpsPrev = $('#differences-prevlink').attr('href');
cpsNext = $('#differences-nextlink').attr('href');
cpsUser = $('.diff-ntitle .mw-userlink').text();
cpsComment = $('.diff-ntitle .comment').html();
cpsTime = $('#mw-diff-ntitle1 a:first')[0] ? $('#mw-diff-ntitle1 a:first').text().match(/(\d.+)/)[1] : '????';
$('#cpsDiff .diff tr:first, #cpsDiff .firstrevisionheader').remove();
if (cpsSysop) $.get('/wiki/Special:Block/' + cpsUser, function (xml) {
if ($('#mw-input-wpReason-other', xml).attr('value').length == 0) cpsEnable('#cpsBlock');
$('#mw-input-wpReason').replaceWith($('#mw-input-wpReason', xml));
$('#mw-input-wpExpiry').replaceWith($('#mw-input-wpExpiry', xml));
$('#cpsList').html($('#bodyContent ul', xml));
$('#cpsList .mw-logevent-actionlink, #cpsList .mw-usertoollinks').remove();
});
cpsDisplay();
}
function cpsShowBlockMessage() {
$( "#cpsBlockReasonBox" ).toggle();
}
function cpsShowReportReason() {
$( "#cpsReportReasonBox" ).toggle();
}
function cpsShowWarnBox() {
$( "#cpsWarnBox" ).toggle();
}
function cpsWarn() {
$.post( mw.config.get('wgScriptPath') + '/api.php', {
action: 'edit',
appendtext: '\n' + (/(Предупреждение|Вандализм|Ваше имя|Внимание-копивио|Предупреждение-ЛС участника|Предупреждение-удаление текста|Рекламный ник)/.test( $('#cpsWarnTmpl').val() ) ? '== Предупреждение \{\{subst:CURRENTDAY\}\}.\{\{subst:CURRENTMONTH\}\}.\{\{subst:CURRENTYEAR\}\} ==' : '') + '\n{{subst:' + $('#cpsWarnTmpl').val() + ($('#cpsWarn1stParameter').val() ? '|1=' : '') + (/(Внимание-копивио|СпасибоКоротко|СпасибоНезначимо|Нарушение АП)/.test( $('#cpsWarnTmpl').val() ) ? cpsTitle : $('#cpsWarn1stParameter').val()) + ($('#cpsWarn2ndParameter').val() ? '|2=' : '') + $('#cpsWarn2ndParameter').val() + '}}. — ~~' + '~~',
summary: 'Предупреждение с помощью [[user talk:Absconditus/cps.js|cps.js]]',
title: 'User_talk:' + cpsUser,
token: cpsToken
}, cpsSuccess('#cpsWarnConfirm') );
}
function cpsDisplay() {
cpsEnable('#cps *:not(#cpsBlock)');
if (cpsLinks[cpsLink]) cpsLinks[cpsLink].parent().addClass('cpsUsedLink');
$('#cps button').css('background-color', '');
cpsClear();
if (!cpsPrev) cpsDisable('#cpsLeft, #cpsUndo');
if (!cpsNext) cpsDisable('#cpsRight'); else $('#cpsUndo').css('background-color', 'yellow');
if (!cpsLinks[cpsLink - 1]) cpsDisable('#cpsUp');
if (!cpsLinks[cpsLink + 1]) cpsDisable('#cpsDown');
$('#cpsTime').text(cpsTime);
$('#cpsTitle').text(cpsTitle).attr('href', '/wiki/' + encodeURI(cpsTitle));
$('#cpsDiffLink').attr('href', '/w/index.php?diff=' + cpsRevid);
$('#cpsNewRev').attr('href', '/w/index.php?oldid=' + cpsRevid);
$('#cpsHistory').attr('href', '/w/index.php?action=history&title=' + cpsTitle);
$('#cpsEdit').attr('href', '/w/index.php?action=edit&title=' + cpsTitle);
if (cpsUser) {
$('#cpsUser').text(cpsUser).attr('href', encodeURI('/wiki/User:' + cpsUser));
$('#cpsTalk').attr('href', encodeURI('/wiki/User_talk:' + cpsUser));
$('#cpsContribution').attr('href', '/wiki/Special:Contributions/' + cpsUser);
$('#cpsBlockLog').attr('href', '/w/index.php?title=special:log/block&page=User:' + cpsUser);
}
if(/(Обсуждение|Участник|Википедия|MediaWiki|Справка|Инкубатор|Проект|Арбитраж)/.exec(cpsTitle)) cpsDisable('#cpsReview');
$('#cpsComment').html(cpsComment);
$('#cpsContent').css('height', ($('#cpsBar').innerHeight() - $('#cpsHeader').outerHeight() - $('#cpsControl').outerHeight() - 25) + 'px');
}
function cpsStartup() {
var diff = false;
if (mw.config.get('wgAction') != 'edit' && mw.config.get('wgAction') != 'submit') {
importStylesheetURI('//bits.wikimedia.org/ru.wikipedia.org/load.php?modules=mediawiki.action.history.diff&only=styles');
importStylesheetURI(encodeURI('//ru.wikipedia.org/w/index.php?title=user:Absconditus/cps.css&action=raw&ctype=text/css'));
if (/diff=\w+/.exec(location.href)) {
diff = true;
$(cpsEmbedHtml).insertBefore('.diff');
$('.cpsNoDiff').remove();
}
else {
function onclick(href, i) {
return function () {
cpsLink = i;
cpsQueryDiff(href);
}
}
$('#bodyContent').append(cpsFrameHtml);
$('#bodyContent a[href*="diff="]:not(:contains("текущ."), :contains("проверить"))').each(function (i) {
cpsLinks[i] = $('<a class="cpsLink">' + $(this).text() + '</a>').click(onclick(this.href, i)).appendTo($('<span></span>').insertAfter(this));
$(this).addClass('cpsOldLink').hide();
});
}
}
cpsDisable('#cps *:not(#cpsKick)');
if (mw.config.get('wgAction') == 'history') $('#cpsLeft, #cpsRight').remove();
if (cpsSysop) $('#cpsReport').remove(); else { $('.cpsSysop').remove(); $('#cpsDiff').css('height', '100%'); };
if (cpsSummary) $('#userSummaryButtonsA').prepend(cpsSummary.replace(/#(.*)@(.*)/g, '<a class="cpsSummaryItem" title="$2">$1</a>'));
$('.cpsSummaryItem').click(function () {
if (!$(this).hasClass('cpsSummaryItemChosen')) {
var text = $('#wpSummary').attr('value');
if (text.length > 0) text += ', ';
$('#wpSummary').attr('value', text + this.title);
$(this).addClass('cpsSummaryItemChosen');
}
});
if (diff) cpsParseDiff();
}
if (cpsWorkspace.exec(location.href) || cpsWorkspace2.exec(mw.config.get('wgPageName'))) {
cpsSysop = (/sysop|moderator/).exec(mw.config.get('wgUserGroups'));
$.get('/w/api.php', { titles: 'User:' + mw.config.get('wgUserName') + '/cps', action: 'query', prop: 'info|revisions', intoken: 'edit', rvprop: 'content', rvexpandtemplates: '1', rvlimit: '1', format: 'xml' }, function (xml) {
try {
cpsToken = $('page', $(xml).text()).attr('edittoken');
cpsSummary = $('rev', $(xml).text()).html();
$('#p-tb ul').append('<li>БПС: <a href="//ru.wikipedia.org/wiki/User:' + mw.config.get('wgUserName') + '/cps">Настроить</a> | <a onclick="cpsHideAll()" style="cursor:pointer">Скрыть</a></li>');
cpsStartup();
} catch(e) {
// expand templates is deprecated
}
});
}
//</source>