Проект:Технические работы/Персональные скрипты/Редактирования
Панели редактирования
[править код]Кнопки
[править код]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
Предпросмотр
[править код]Кнопка мгновенного предпросмотра
[править код]генерируемого браузером, т.е. фактически MediaWiki → html парсер; разумеется, не разворачивает шаблоны и имеет другие ограничения: скрипт en:User:Pilaf/InstaView. Установка: importScript('User:Pilaf/instaview.js', 'en')
Кнопка быстрого предпросмотра
[править код]с использованием 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 добавляет кнопку подписи на всех страницах обсуждений и форумов и напоминает, если вы пытаетесь записать страницу без подписи.