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

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Кнопки[править код]

 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 добавляет кнопку подписи на всех страницах обсуждений и форумов и напоминает, если вы пытаетесь записать страницу без подписи.