Проект:Технические работы/Персональные скрипты/Редактирования

Короткая ссылка-перенаправление

Панели редактирования править

Кнопки править

 B   I  Ab … …

11 общих для всех проектов кнопок генерируются Mediawiki-движком. Функция addButton(…) (прямо в коде страницы редактирования) заполняет нужными значениями массив mwEditButtons[]


К:    

Ещё четыре кнопки добавляются в местном файле MediaWiki:Editpage.js в другой массив mwCustomEditButtons[]. (Кроме того, в том же файле добавляются две совсем нестандартные кнопки — Викификатора и создания таблицы, но мы их рассматривать не будем)


Подразумевается, что все нижеследующие примеры вызываются по addOnloadHook: в этот момент вышеупомянутые массивы уже сформированы, но сами кнопки ещё не «нарисованы» на тулбаре (функцией mwSetupToolbar() в wikibits.js). Также не забывайте, что массивы нумеруются с 0.

if (mw.config.get('wgAction') == 'edit' || mw.config.get('wgAction') == 'submit')
addOnloadHook(function(){
 // предлагаемые ниже примеры
 // размещаются тут внутри
})


Удаление всех кнопок

mwEditButtons = [] //удалить стандартные 11 кнопок
mwCustomEditButtons = [] //удалить кнопки, добавляемые в русской Википедии


Удаление некоторых кнопок

mwEditButtons.splice(3, 4) //удалить стандартные кнопки: со 4й по 7ю
// здесь параметры: slice(первая кнопка, сколько подряд удалить)


Добавление кнопки:
Как пример см. InsertButtonsToToolBar() в MediaWiki:Editpage.js. Конечно, сперва нужны (размещённые на любом сайте) изображения соответствующего размера.


Изменение картинки: см. реальный пример


Изменение вставляемого текста

if (mwEditButtons[5]) //у кнопки «Изображение»
  mwEditButtons[5].tagClose = '|thumb]]'; //вместо обычного ']]'
if (mwEditButtons[9]) //у кнопки Подписи
 mwEditButtons[9].tagOpen = ' — ~~~~';


Большой набор новых кнопок с разной функциональностью можно найти на странице en:User:MarkS/Extra_edit_buttons. При желании вы также можете добавить похоже выглядящую текстовую кнопку: см. addToolbarButton() в qPreview.

Быстрая вставка править

Пример: добавление div и span в начало панели «быстрой вставки»:

function addExtraChars1(){
  var block = document.getElementById ('editpage-specialchars');
  if (!block) return;
  block.innerHTML = 
   '<a href=\'javascript:insertTags("<div>","</div>","")\'>div</a> ' +
   '<a href=\'javascript:insertTags("<span>","</span>","")\'>span</a> ' +
   block.innerHTML;
}
addOnloadHook(addExtraChars1);

Пример: добавление [[Участник:]] вместо Copyrightwarning:

function addExtraChars2(){
  var block = document.getElementById ('editpage-copywarn');
  if (!block) return;
  block.innerHTML = 
   '<a href=\'javascript:insertTags("[[Участник:","]]","")\'>div</a> ';
}
addOnloadHook(addExtraChars2);

Пояснения: сперва скрипт находит нужный блок по его id. Зайдите на любую страницу редактирования, посмотрите HTML-код и вы увидите, у каких служебных элементов интерфейса указано id=…. Например:

  • <div id=toolbar> — тулбар (верхняя панель кнопок)
  • <div id=editpage-copywarn> — сообщение Copyrightwarning:
  • <div id=editpage-specialchars> — панель «быстрой вставки» Edittools

Затем скрипт добавляет ссылки в этот блок

  • в начало: block.innerHTML = newLinks + block.innerHTML
  • в конец: block.innerHTML = block.innerHTML + newLinks
  • полностью заменяя содержимое: block.innerHTML = newLinks


Замечание: принципиальной разницы между таким ссылками быстрой вставки и кнопками (выше) нет. Они все используют функцию insertTags(), у которой три параметра: текст, вставляемый слева, текст, вставляемый справа (от курсора либо выделенного текста) и текст-образец (часто не указывается).


Выпадающий список править

Более сложный пример: добавление в начало панели «быстрой вставки» выпадающего списка шаблонов. При выборе из списка шаблон вставляется в конец редактируемого текста, а его название — в поле описания изменений.

function addTemplatesList(){
 var block = document.getElementById('editpage-specialchars');
 if (!block) return;
 block.innerHTML = 
  '<select onchange=insertSel(this)>'
 +'<option>Шаблоны</option>'
 +'<option value="subst:welcome">Welcome</option>'
 +'<option value="subst:anon">Anon</option>'
 +'<option value="stub">Stub</option>' // и т.д. — дополняйте сами
 +'</select>' + block.innerHTML;
}
function insertSel(sel){
 if (sel.selectedIndex <= 0) return;
 var insertion = sel.options[sel.selectedIndex].value;
 document.editform.wpTextbox1.value += '{'+'{' + insertion + '}}\n';
 document.editform.wpSummary.value += insertion;
}
addOnloadHook(addTemplatesList);


Перемещение панели кнопок вниз править

под область редактирования

addOnloadHook(function(){
 var toolbar = document.getElementById('toolbar')
 var copywarn = document.getElementById('editpage-copywarn')
 if (!toolbar || !copywarn) return
 copywarn.parentNode.insertBefore(toolbar, copywarn)
})


Редактирование править

Редактируемый текст

Редактируемый текст

Быстрый переход в нужное место редактируемого вики-кода из области предпросмотра: скрипт Jump2Text


Предпросмотр править

Кнопка мгновенного предпросмотра править

 InstaView 

генерируемого браузером, т.е. фактически MediaWiki → html парсер; разумеется, не разворачивает шаблоны и имеет другие ограничения: скрипт en:User:Pilaf/InstaView. Установка: importScript('User:Pilaf/instaview.js', 'en')


Кнопка быстрого предпросмотра править

  QPreview 

с использованием AJAX: с сервера запрашивается и перерисовывается только статья без перезагрузки всей страницы, что экономит и время, и трафик: скрипт qPreview

Разное править

Вызов Викификатора править

Такой скрипт добавит внизу кнопку «Викификатор» (справа от кнопки «Внесённые изменения»). Перед добавлением скрипта вы можете поменять для себя текст кнопки или горячую клавишу вызова.

addOnloadHook(function(){
 var wpDiff = document.getElementById('wpDiff');
 if (!wpDiff) return;
 newBtn = document.createElement('input');
 newBtn.type = 'button'; 
 newBtn.onclick = Wikify;
 newBtn.value = 'Викификатор'; //текст кнопки
 newBtn.accessKey = 'a'; //горячая клавиша
 wpDiff.parentNode.insertBefore(newBtn, wpDiff.nextSibling);
})


Подпись править

 ~    Записать страницу 

Скрипт qSig добавляет кнопку подписи на всех страницах обсуждений и форумов и напоминает, если вы пытаетесь записать страницу без подписи.