Участник:DerLetzteRegenbogen/rq-template.js

Материал из Википедии — свободной энциклопедии
// <nowiki>
// Скрипт для подстановки в текст шаблона Rq со всеми параметрами, кроме тематики.
// Добавляет сам себя в HTML-код панели быстрой вставки.
// Набор параметров шаблона можно указать в monobook.js, задав массив строк под именем parameters.
// Если шаблона на странице нет, скрипт подставляет его в конец
// Если шаблон есть, то он будет заменён шаблоном с указанными параметрами.
// Если шаблонов несколько, заменён будет первый из них.
// В планах:
// * Добавление параметра тематики;
// * Заполнение чекбоксов в соответствии с параметрами при открытии страницы редактирования с помощью регулярных выражений;
// * Упрощение интерфейса.

// Начало.

var parameters;

 // Проверка, задан ли пользователем другой набор параметров шаблона:
if (parameters == null) {
 var parameters = ['birth', 'cat', 'check', 'checktranslate', 'cleanup', 'coord', 'death', 'global', 'grammar', 'imdb', 'img', 'infobox', 'isbn', 'iwiki', 'linkless', 'looplink', 'patronymic', 'recat', 'refless', 'renew', 'sort', 'stress', 'stub', 'style', 'sources', 'taxobox', 'translate', 'wikify'];
}

 // Функция добавления инструмента на панель быстрой вставки:
function addRqTemplateElements(){
  // Находим панель: быстрой вставки:
 var block = document.getElementById('editpage-specialchars');
  // Если панель быстрой вставки не найдена, функция завершается:
 if (!block) return;
  // Подготовка HTML-кода для вставки в начало панели:
 var insertion = 'Параметры шаблона <a href="/wiki/Шаблон:Rq">Rq</a>: ';
  // Добавление чекбоксов и описаний по значению параметров в HTML-код для вставки:
  // (Каждый чекбокс имеет id и имя вида Rqпараметр, например, Rqbirth
  // Соответственно, потом его можно будет «найти» с помощью функции document.getElementById)
 for (var j=0; j<parameters.length; j++) {
  insertion += '<input id="Rq' + parameters[j] + '" type="checkbox" name="Rq' + parameters[j] + '" onclick="">&nbsp;' + parameters[j] + ' ';
 }
  // Добавление кнопки в HTML-код для вставки:
 insertion += '<input type="button" name="RqPerformAction" value="Выполнить" onclick="addRqTemplatePerform()">';
  // Добавление подготовленного HTML-кода в код панели:
 block.innerHTML = insertion + block.innerHTML;
}

 // Функция добавления в текст шаблона:
function addRqTemplatePerform(){
  //Текстовое поле:
 var textarea = document.editform.wpTextbox1;
  // Строка с шаблоном для вставки в текст:
 var insertion = '\{\{rq';
  // Регулярное выражение, которому соответствует любой шаблон Rq (или название которого начинается на Rq), вне зависимости от параметров:
 var regexp = /\{\{(R|r)(Q|q)(\s|\S)*\}\}/;
  // Составляем строку с шаблоном:
 for (var j=0; j<parameters.length; j++) {
  if (document.getElementById('Rq'+parameters[j]).checked) {
   insertion += '|'+parameters[j];
  }
 }
 insertion += '}}';
  // Ищем, есть ли в тексте шаблон Rq:
 if (textarea.value.search(regexp) >= 0) {
   // Если находим:
   // Заменяем соответствие регулярному выражению строкой с шаблоном:
  textarea.value = textarea.value.replace(regexp, insertion);
 }
 else {
   // Если не находим:
   // Подставляем строку с шаблоном в конец текста с новой строки:
  textarea.value += '\n'+insertion;
 }
}

$(addRqTemplateElements);
// </nowiki>