Instant Diffs
Instant Diffs (ID) — безкоштовний інструмент з відкритим вихідним кодом на JavaScript, який доповнює посилання MediaWiki на версії та різниці між ними інтерактивним переглядом. Замість переходу на окрему сторінку, користувачі можуть переглядати, порівнювати та взаємодіяти з версіями безпосередньо на сторінці — вміст завантажується на вимогу у діалоговому вікні через AJAX.
Гаджет працює на всіх системних сторінках MediaWiki, де присутні посилання на версії та різниці між ними, включаючи локальні та глобальні списки спостереження, локальні та глобальні внески користувачів, нові редагування, журнали, нові сторінки та історія змін, а також у контенті доданому користувачами, зокрема на сторінках обговорень та проектів.
Можливості
- Відображає кнопку дії (❖ для редагування, чи ✪ для версії) після посилання для відкриття вікна Instant Diffs. За замовчуванням дія додається безпосередньо до посилання, але ви можете відкривати посилання в поточній вкладці за допомогою Alt+Клік.
- Відображає кнопку (➔) після посилання для переходу на сторінку та розділ, де було зроблено редагування. Якщо встановлено гаджет Convenient Discussions, кнопка також спробує перейти до відповідного коментаря.
- Дозволяє швидке перемикання між переглядом версії та її порівнянням з іншою версією.
- Надає меню швидких дій у діалоговому вікні, що дозволяє копіювати посилання (включаючи внутрішні вікі-посилання), порівнювати обрану версію з поточною, переходити на сторінку, її історію або обговорення, та додавати чи видаляти сторінку зі списку спостереження.
- Дозволяє додавати користувацькі дії в меню швидких дій за допомогою гнучкого API. Дивіться Посібник розробника.
- Дозволяє переглядати редагування і версії з у розширеннях GlobalContributions і GlobalWatchlist, в редагуваннях з Вікіданих, а також у контенті доданому користувачами.
- Підтримує поєднання клавіш для навігації між редагуваннями і посиланнями на сторінці у вікні Instant Diffs:
- Esc - закрити вікно Instant Diffs;
- Стрілка вліво - перейти до попереднього редагування чи версії в історії змін;
- Стрілка вправо - перейти до наступного редагування чи версії в історії змін;
- Ctrl+Стрілка вліво - перейти до попереднього посилання на сторінці;
- Ctrl+Стрілка вправо - перейти до наступного посилання на сторінці;
- Ctrl+Стрілка вгору - переключити між переглядом версії та її порівнянням;
- Ctrl+Стрілка вниз - перемикнути видимість меню дій;
- ⇧ Shift+L - порівняти з поточною версією, якщо доступно;
- ⇧ Shift+P - показати всі неперевірені зміни, якщо доступно;
- Ctrl+Z - повернутися до попереднього перегляду, якщо доступно.
- Забезпечує надсилання подяки, патрулювання та відкочування безпосередньо з діалогового вікна, з підтвердженням.
- Надає можливість адміністраторам переглядати приховані версії безпосередньо в діалоговому вікні без додаткових дій. Для перегляду вмісту прихованих версії потрібне право користувача
suppressrevision. - Повністю адаптується під мобільні пристрої, з особливою оптимізацією для скіна Minerva Neue.
- Пропонує широкий спектр налаштувань, які зберігаються або в локальній вікі, або глобально в усіх проєктах вікі-ферми. Наприклад, налаштування, змінені в одному з проєктів Wikimedia, автоматично синхронізуються з усіма іншими.
- Надає гнучку конфігурацію для локального розгортання гаджету. Дивіться доступні параметри на GitHub.
Встановлення
Мінімально необхідна версія MediaWiki — 1.35, однак наполегливо рекомендується оновитися до версії 1.43 (LTS).
Щоби встановити скрипт для всіх проєктів Вікімедіа, додайте наступний код в ваш global.js на Meta:
mw.loader.load( 'https://www.mediawiki.org/w/index.php?title=User:Serhio_Magpie/instantDiffs.js&action=raw&ctype=text/javascript' ); // [[mw:Instant Diffs]]
Як додаток
Щоби встанови скрипт як додаток, створіть сторінку MediaWiki:Gadget-instantDiffs.js і додайте код наведений вище.
Далі перейдіть на сторінку MediaWiki:Gadgets-definition у вашій вікі та додайте наступну конфігурацію додатка:
* instantDiffs [ResourceLoader | dependencies=site, mediawiki.api, mediawiki.util, mediawiki.storage, mediawiki.notification, mediawiki.Title, oojs] | instantDiffs.js
Як користувацький скрипт Greasemonkey / Tampermonkey
за допомогою розширення менеджера користувацьких скриптів для браузера.
Пісочниця
Ви можете долучитися до тестування нових нестабільних версій скрипта:
mw.loader.load( 'https://www.mediawiki.org/w/index.php?title=User:Serhio_Magpie/instantDiffs.test.js&action=raw&ctype=text/javascript' ); // [[mw:Instant Diffs]]
Локальне розгортання
Цей гаджет опубліковано в просторі користувачів, що може викликати питання безпеки. Однак, як єдиний автор, я вживаю всіх необхідних запобіжних заходів безпеки та ввімкнув двофакторну аутентифікацію. Якщо у вас лишилися питання щодо безпеки, або якщо ваша політика безпеки/правила веб-сервера забороняють зовнішні скрипти, ви можете розгорнути цей ґаджет локально, дотримуючись інструкцій на GitHub.
Конфігурація
Для користувачів
Instant Diffs надає широкі можливості налаштування за допомогою користувацького інтерфейсу. Спочатку скрипт зберігає налаштування користувача в локальному сховищі браузера. У разі авторизації користувача скрипт перевіряє, чи встановлено розширення GlobalPreferences. Якщо так, налаштування зберігаються глобально для всіх пов'язаних проєктів. Інакше налаштування зберігаються локально в поточному проєкті.
Для власників або адміністраторів сайтів
Якщо ви розглядаєте можливість встановлення Instant Diffs на сайті для всіх ваших користувачів і бажаєте приховати деякі непотрібні опції, такі як «Увімкнути для мобільної теми» — додайте наступний код перед завантаженням скрипта:
// [[mw:Instant Diffs]]
window.instantDiffs = window.instantDiffs || {};
instantDiffs.settings = instantDiffs.settings || {};
instantDiffs.settings.enableMobile = false;
mw.loader.load( 'https://www.mediawiki.org/w/index.php?title=User:Serhio_Magpie/instantDiffs.js&action=raw&ctype=text/javascript' );
У наведеному вище прикладі встановлення enableMobile = false приховає відповідну опцію у вікні налаштувань для ваших користувачів.
Якщо ви бажаєте змінити налаштування скрипта за замовчуванням, подібно до прикладу вище, додайте наступний код перед завантаженням скрипта:
// [[mw:Instant Diffs]]
window.instantDiffs = window.instantDiffs || {};
instantDiffs.defaults = instantDiffs.defaults || {};
instantDiffs.defaults.enableMobile = false;
mw.loader.load( 'https://www.mediawiki.org/w/index.php?title=User:Serhio_Magpie/instantDiffs.js&action=raw&ctype=text/javascript' );
У прикладі вище встановлення enableMobile = false вимкне Instant Diffs на мобільному скіні (Minerva) для ваших користувачів.
Для розробників
Якщо ви плануєте використовувати Instant Diffs у складі вашого користувацького скрипта або гаджета, варто завантажувати його з параметром запиту instantdiffs[standalone]=true, щоб основні процеси Instant Diffs не впливали на користувачів, які його не встановили:
mw.loader.load( 'https://www.mediawiki.org/w/index.php?title=User:Serhio_Magpie/instantDiffs.js&instantdiffs[standalone]=true&action=raw&ctype=text/javascript' );
Якщо ви хочете додати користувацькі дії до меню швидких дій Instant Diffs або дізнатися, як позначити користувацькі посилання, щоб вони оброблялися скриптом, дивіться Посібник розробника.
Локалізація
Instant Diffs за замовчуванням містить англомовні рядки для прискорення завантаження для більшості користувачів та як резервний варіант, коли переклади відсутні.
Ви можете допомогти з перекладом проєкту на Translatewiki.
На вікі-сторінці з активним Instant Diffs ви можете побачити назви повідомлень замість їх вмісту, додавши параметр uselang=qqx у кінець URL (аналогічно як з перекладом MediaWiki).
Доступні мови
- арабська
- азербайджанська
- бенгальська
- німецька
- грецька
- англійська
- іспанська
- перська
- фінська
- французька
- ірландська
- галісійська
- хауса
- іврит
- гінді
- індонезійська
- італійська
- японська
- корейська
- люксембурзька
- македонська
- малайська
- нідерландська
- панджабі
- польська
- пушту
- Brazilian Portuguese
- португальська
- румунська
- російська
- словацька
- словенська
- українська
- вʼєтнамська
- китайська (спрощене письмо)
- китайська (традиційне письмо)
Інтеграції
- GlobalPreferences extension. Note: Implemented saving user settings globally via API if the extension is installed.
- Flagged Revisions extension. Note: Displays the "View all pending changes" and the "Review pending changes" buttons in the Diff Dialog. Adds link actions on the Special:PendingChanges page.
- GlobalContributions extension. Note: Implements viewing foreign diffs and revisions.
- GlobalWatchlist extension. Note: Implements viewing foreign diffs.
- IPInfo extension. Note: Implements viewing user IP info inside the Instant Diffs dialog.
- Translate extension. Note: Partially implemented. Adds actions to the summary links in the editor sidebar.
- Convenient Discussions by Jack who built the house. Note: Implemented links that navigate directly to the corresponding comment, replacing links that previously led to the page.
- CompareRevisions by BrandonXLF. Note: Tested and fully functional, but currently has conflicts on diff pages. For a smoother experience, consider using a fork.
- diffedit by Jon Harald Søby. Note: Tested and fully functional, but currently has a breaking change. Made a PR to the source code to implement content hooks. For a smoother experience, consider using a fork.
- fancy-diffs by Enterprisey. Note: Tested and fully functional. No additional implementation required.
- SmartDiff by Nardog. Note: Tested and fully functional. No additional implementation required.
- Twinkle by AzaToth. Note: Tested and fully functional. Made a PR to the source code. Implemented Instant Diffs dialog closing when clicking on Twinkle links in it.
- TwinkleGlobal by Xiplus. Note: Tested and fully functional. Made a PR to the source code. Implemented Instant Diffs dialog closing when clicking on Twinkle links in it.
- wikEdDiff by Cacycle. Note: Tested and fully functional. Implemented using a workaround by resetting the state of the diff table.
Журнал змін
V6.9 (current)
Updates
- Updated GitHub Actions workflow files to include permissions and opt-in i18n deployment.
- Changed behavior of the "Go to page" and its counter-page actions: "Go to page" now always jumps to the current page instead of the subject page.
- Improved diff lines highlighting behavior: now adds transition animation only when view action was triggered.
- Added new Extensions manager: every extension now exports a schema object instead of registering mw.hook at import time.
- Refactored navigation menu buttons and groups to use shared mixins, group navigation actions in the actions menu.
- Added media query based visibility for action buttons in Navigation.
- Changed hotkey for "Pending Changes" action to ⇧ Shift+P, added hotkey for "Compare Latest" action — ⇧ Shift+L.
- Refactored CSS class names; exposed
Naviagtionclass in the modules. - Re-integrated the new watchstar popover (beta).
Integrations
- Moved GlobalWatchlist specific selectors from the config to the extension, that sets universal selectors.
- Added indent before event logs in the FlaggedRevs form.
- Moved links and page-related code for FlaggedRevs to the extension.
- Enabled review button when viewing revisions in the FlaggedRevs extension.
- Fixed cases when review button isn't displayed on diffs if there are no changes from the reviewed version.
- Shown the "Pending changes" button in the revision view (previously only shown on diff pages).
- Corrected FlaggedRevs terminology from "unpatrolled" to "pending changes" throughout.
- Added review state on the Review button in the FlaggedRevs extension, and hotkey to review revision in one click ⇧ Shift+Click.
- Improved diff lines styles on Citizen skin.
- Fixed horizontal scrolling on MonoBook skin on mobile, also restored compact navigation bar.
Fixes
- Fixed deploy action script: added fetch-depth: 0 to populate all contributors.
- Fixed the "Compare latest" action for the first revision.
- Fixed a link search-parameter swap bug in Article.js: diff links with a non-empty title but a direction (prev/next) in oldid weren't corrected.
- Fixed regression with "History Compare" button events.



