User:Remember the dot/Syntax highlighter/uk



Я створив сценарій, який барвисто виділяє синтаксис у вікні редагування. На відміну від інших сценаріїв підсвічування синтаксису на кшталт wikEd, AceWikiEditor і CodeMirror, цей:
 * Оновлює підсвічування автоматично під час набору.
 * Не ламає кнопки «Скасувати» та «Повторити».
 * Не ламає перевірку орфографії.
 * Сумісний із більшістю інший сценаріїв, які впливають на вікно редагування.

Встановлення
Будь ласка, обов'язково прочитайте розділ «Відомі проблеми» перед установленням сценарію.

Для кінцевого користувача, якщо встановлено у Вікіпедії
Якщо підсвічувальник синтаксису доступний як додаток у вашій Вікіпедії, то перейдіть до своїх налаштувань і увімкніть його.

Для кінцевого користувача, якщо не встановлено у Вікіпедії
Якщо встановлення як додатку недоступне, то додайте ці рядки до своєї сторінки common.js:

Наприклад, якщо Українська Вікіпедія не надає підсвічувальник синтаксису як додаток, то ви додали б його до https://uk.wikipedia.org/wiki/User:Your_Username/common.js

Для адміністраторів сайтів Вікімедіа
У своїй Вікіпедії створіть сторінку MediaWiki:Gadget-DotsSyntaxHighlighter.js‎ з кодом

Потім додайте на сторінку MediaWiki:Gadgets-definition‎ новий рядок * DotsSyntaxHighlighter[ResourceLoader]|DotsSyntaxHighlighter.js та створіть сторінку MediaWiki:Gadget-DotsSyntaxHighlighter‎ з текстом Syntax highlighter: Барвисто виділяє синтаксис у вікні редагування.

Для адміністраторів поза-Вікімедійних сайтів
У своїй Вікіпедії створіть сторінку MediaWiki:Gadget-DotsSyntaxHighlighter.js‎ та скопіюйте на неї початковий код із User:Remember the dot/Syntax highlighter.js. Потім додайте на сторінку MediaWiki:Gadgets-definition‎ новий рядок * DotsSyntaxHighlighter[ResourceLoader]|DotsSyntaxHighlighter.js і створіть сторінку MediaWiki:Gadget-DotsSyntaxHighlighter‎ з текстом Syntax highlighter: Барвисто виділяє синтаксис у вікні редагування.

Необхідний MediaWiki 1.33 або вище.

Сумісність

 * 1) Підсвічувальник найліпше працює в останній версії Firefox.
 * 2) Підсвічувальник працює майже весь час в останніх версіях Chrome, Safari й Opera, але не працює правильно в тексті, написаному в певних написаннях, зокрема тайському та тибетському.
 * 3) Підсвічувальник не працює в Internet Explorer або Edge (їхні помилки занадто суворі). Підсвічувальник навіть не намагається працювати, якщо виявлено один із цих веб-браузерів.
 * 4) Підсвічувальник несумісний із деякими додатками, браузерними додатками й іншими налаштуваннями.

Синтаксичний аналіз

 * 1) З метою продуктивності підсвічувальник вимагає від усіх тегів правильності XML. Наприклад, переконайтеся, що, почавши тег , ви закінчили його  , і викоирстовуйте   замість.
 * 2) З метою продуктивності підсвічувальник синтаксису не може обробляти   чи   &mdash; він вважає їх недійсним синтаксисом. Я пропоную натомість використовувати   і.
 * 3) Теги , створені шляхом розміщення пробілу на початку рядка, не підсвічуються. Це так, тому що підсвічувальник недостатньо розумний, аби сказати, коли пробіл на початку рядка є просто пропуском усередині шаблону.
 * 4) Перемикачі поведінки на кшталт   не підсвічуються.
 * 5) Зовнішні посилання, створені за допомогою   або шаблонів, не підсвічуються. Ви бачитимете   замість.

Різне

 * 1) Підсвічувальник не працює добре при редагуванні довгих статей та автоматично вимикатиметься, якщо затримується на понад 50 мс. Якщо так сталося, то з'явиться повідомлення з поясненням того, що сталося, та пропозицією, як обійти його чи збільшити тайм-аут.
 * 2) Підсвічувальник не виконується під час завантаження файлів.
 * 3) Підсвічувальник може перекривати ваші користувацькі стилі, пов'язані з вікном редагування.

Кольори
Легко змінити підсвічувальник для використання інших кольорів або непідсвічування певних синтаксисів. Доступні такі налаштування кольорів:

Наприклад, аби зробити вікіпосилання блакитним, а зовнішні посилання помаранчевим, помістіть наступне до свого common.js (якщо встановлено підсвічувальник як додаток, опустивши перші два рядки, або ваш веб-браузер зависатиме):

Аби не підсвічувати синтаксис, встановіть його колір у. Наприклад, аби вимкнути підсвічування зовнішніх посилань:

Аби не підсвічувати жоден синтаксис, за винятком того, що ви явно хочете, встановіть  у , а колір кожного бажаного синтаксису у підсвічування. Якщо ви просто хочете звичайний колір, встановіть його у. Наприклад, для підсвічування тільки тегів:

Тайм-аут
Ви можете вказати, який замінює тайм-аут за замовчуванням 50 мс. Наприклад, якщо у вас усе гаразд із млявістю під час набору тексту, і ви хочете вимкнути підсвічування лише, якщо воно займає понад 75 мс, помістіть наступне до свого common.js:

Якщо ви встановили підсвічувальник як додаток, то опустіть перші два рядки, або ваш веб-браузер зависатиме.

Поза-вікітекстові теги
Деякі теги на кшталт  і   не використовують вікітекст, а тому жоден вікітекст не підсвічуватиметься всередині них. Ви можете налаштувати список тегів на кшталт source шляхом установлення  у масив назв тегів. Наприклад, для вимкнення підсвічування синтаксису всередині гіпотетичного тегу  на додачу до замовчувань помістіть наступне до свого common.js:

Інші теги на кшталт  та   не виокристовують вікітекст, але виконують обробку символьних сутностей (, наприклад). Список тегів на кшталт nowiki контролюється властивістю. Наприклад, для підсвічування лише символьних сутностей усередині тегу  помістіть наступне до свого common.js:

В обох прикладах, якщо ви встановили підсвічувальник як додаток, опустіть перші два рядки, або ваш веб-браузер зависатиме.

Замовчування сайту
Всі властивості, які можна вказувати у змінній, можна вказувати й у змінній. призначено для замовчувань сайту, а  для користувацьких налаштувань. Властивості  мають пріоритет над властивостями , а властивості   мають пріоритет над вбудованими замовчуваннями.

Наприклад, якщо ваш сайт не має жодного встановленого розширення MediaWiki, ви можете захотіти видалити підтримки тегів на кшталт source. Для цього додайте наступне наприкінці MediaWiki:Gadget-DotsSyntaxHighlighter‎:

Звітування про помилки

 * Увага: Пам'ятайте перевіряти, чи є помилка, про яку ви хочете звітувати, вже у відомих проблемах.

Звітуючи про помилки мені, будь ласка, включайте:
 * Детальний опис проблеми.
 * Посилання на сторінку, де видно помилку, або зразок вікітексту, що викликає проблему.
 * Інформацію про User-Agent вашого веб-браузера.
 * Оформлення MediaWiki, яке ви використовуєте.
 * Список додатків, які ви увімкнули.
 * Список будь-яких нетипових JavaScript або CSS, які ви увімкнули.
 * Список будь-яких розширень веб-браузера, які ви увімкнули.

Початковий код
Для зменшення часу завантаження й оскільки ResourceLoader автоматично не скорочує сценарії, імпортовані з інших Вікіпедій, сам MediaWiki:Gadget-DotsSyntaxHighlighter.js тримається у скороченому вигляді. Дійсний початковий код доступний на User:Remember the dot/Syntax highlighter.js.

Огляд підходу
Даний сценарій створює фоновий div під назвою wpTextbox0, який вставлено за вікном редагування wpTextbox1. wpTextbox0 і wpTextbox1 синхронізовані за стилем, і тло wpTextbox1 зроблено прозорим так, що wpTextbox0 видно крізь нього. Потім, блоки тексту додаються до wpTextbox0 як елементи span. Текст на блоках прозорий, але тло блоків розфарбоване. Використання того ж тексту у wpTextbox0 як у wpTextbox1 ліквідує будь-які аномалії позиціювання від динамічно складуваних символів. Оскільки wpTextbox0 і wpTextbox1 (теоретично) ідеально синхронізовані, кольорове тло з'являється користувачеві якби воно було додано прямо до wpTextbox1.

Текст у wpTextbox0 насправді не додається до textContents елементів span. Натомість, він додається до псевдоелементів :before й :after кожного span за допомогою динамічно генерованих таблиць стилів CSS. Це усуває проблеми під час спроби використати можливість браузера пошуку на сторінці, оскільки, якщо б textContent використовувався замість умісту CSS, браузер сприймав би і дійсний текст у wpTextbox1, і прозорий у wpTextbox0 на сторінці.