Участник:GreatMusicLover/ping.js

Материал из Википедии — свободной энциклопедии
/*
Скрипт, добавляющий во время предпросмотра кнопку @ рядом с подписями участников, которая вставляет в окно редактирования в позицию курсора шаблон {{ping}} с именем участника из подписи
Основан на [[MediaWiki:Gadget-markadmins.js]]
Баги: 
1) после каждого нажатия на ссылку, окно браузера прокручивается к окну редактирования 
2) из-за особенностей работы двух разных скриптов-выделителей (админов/ПИ и ПАТов), позиция ссылки отличается, но она всегда где-то в конце подписи
3) срабатывает на любые ссылки на страницу участника (включая страницы из личного пространства и скрипты/css-файлы)
*/
function addPing(){
 
 var mm, user;
 mw.util.addCSS('a.userping {color:#0645ad; font-size: 10px;} a.userping:hover {cursor: pointer}');
 
 //Проверяем все <a> элементы (ссылки)
 mw.util.$content.find('a').each( function(i, lnk){
 
  //Смотрим, есть ли в ссылке слово участник/участница
  mm = /^Участни(к|ца):(.*)/.exec(lnk.title);
  //Если нет, то идём дальше
  if( !mm ) return;
  if( /[?#]/.test(lnk.href) && ! /redlink=1/.test(lnk.href) ) return;
 
  user = decodeURIComponent(mm[2]);
 
  //Костыль. Можно, конечно, сделать ещё один user.replace(/\s\([^\)]+\)$/, ''), но тогда оно может убрать текст в скобках, если они есть в имени участника
  //Поскольку гаджет прав добавляет эти права к тултипам подписей, нужно эти права из полученного оттуда текста убрать
  user = user.replace(/\s\(автопатрулируемый.*/, '').replace(/\s\(автопатрулируемый\sи\sоткатывающий.*/, '').replace(/\s\(переименовывающий\sфайлы.*/, '').replace(/\s\(переименовывающий\sбез\sперенаправлений.*/, '').replace(/\s\(патрулирующий.*/, '').replace(/\s\(патрулирующий\sи\sоткатывающий.*/, '').replace(/\s\(администратор.*/, '').replace(/\s\(бюрократ.*/, '').replace(/\s\(проверяющий\sучастников.*/, '').replace(/\s\(подводящий\sитоги.*/, '').replace(/\s\(ревизор.*/, '').replace(/\s\(клерк.*/, '').replace(/\s\(арбитр.*/, '');
  
  //Убираем "(страница отсутствует)" у любителей красных подписей
  if (lnk.className.indexOf('new') != -1) user = user.replace(/ \([^\)]+\)$/,'');
 
  //Добавляем ссылку после подписи
  $(lnk)
  .after('\u00A0', '<a class="userping" title="Вставить шаблон {{ping}} с именем участника" onClick=\'javascript:mw.toolbar.insertTags(\"\{\{ping|' + user + '\}\}\")\'>@</a>');
 });
}

$(document).ready(function(){
	if (mw.config.get('wgAction') === 'submit')
	{
	  addPing();
	}});