Instant Diffs
Instant Diffs (ID) is a JavaScript tool that enhances MediaWiki diff links with interactive functionality — dynamically loaded content via AJAX technology in dialog windows, enables users to interact with diffs and revisions directly within the page, rather than being redirected to a separate page. These features are integrated not only into all core interface pages where revision diffs are linked but also into user-contributed content. The minimal required version of MediaWiki is 1.35 , but it is strongly recommended to upgrade to 1.43 LTS.
Features
edit- Displays an action button (❖ for diffs or ✪ for revisions) after the link to open the Instant Diffs dialog. Otherwise, the click action is added directly to the link, but you can still open the link in the current tab by pressing Alt+Click.
- Displays an action button (➔) after the link to navigate to the page and section where the edit was made. If the Convenient Discussions script is installed, the button will also try to navigate to the corresponding comment.
- Allows quick switching between a revision view and its comparison (diff) with another revision.
- Provides a quick actions menu in the dialog, allowing you to copy the link or an internal wiki link , go to the page, its history, or the discussion.
- Supports sending thanks, patrolling, and rolling back (with confirmation prompts enabled) directly from the dialog.
- Enables administrators to view hidden revisions directly in the dialog, without any additional steps. The
suppressrevision
user right is required to access hidden revision content. - Fully adapts to mobile devices, especially optimized for the Minerva skin.
- Offers a wide range of customization settings that are saved globally across all Wikimedia projects.
Installation
editAs a user script
editTo install the script for all Wikimedia wikis, add this to your global.js on Meta:
mw.loader.load( 'https://mediawiki.org/w/index.php?title=User:Serhio_Magpie/instantDiffs.js&action=raw&ctype=text/javascript' ); // [[mw:Instant Diffs]]
To install the script as a gadget, create the page MediaWiki:Gadget-instantDiffs.js
and add the code provided above.
Then, define the gadget in your wiki's MediaWiki:Gadgets-definition
page with a configuration like this:
* instantDiffs [ResourceLoader | dependencies=site, mediawiki.api, mediawiki.util, mediawiki.storage, mediawiki.notification, mediawiki.Title] | instantDiffs.js
Sandbox
editYou're welcome to help test new unstable versions of the script:
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]]
Configuration
editFor the Users
editInstant Diffs offers a wide range of customization options through its user interface. The script first saves user settings in the local storage of the user's browser. If the user is logged in, the script checks whether the GlobalPreferences extension is installed. If it is, the settings are saved globally across all linked projects. Otherwise, the settings are saved locally on the current project.
For the Site Owners and Administrators
editIf you are considering installing Instant Diffs site-wide for all your users and want to hide some unrelated options from the settings — such as "Enable on the mobile skin" — add the following code before loading the script:
// [[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' );
In the example above, setting enableMobile = false
will hide the corresponding option in the settings dialog for your users.
If you want to alter the script’s default settings, similar to the example above, add the following code before loading the script:
// [[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' );
In the example above, setting enableMobile = false
disables Instant Diffs on the mobile skin (Minerva) for your users.
Localization
editInstant Diffs by default bundles with English language strings to improve loading time for the majority of users and to provide a fallback for non-existent translations. Currently, updates to available language files or the addition of new ones are handled exclusively via pull requests on the GitHub repository. I have submitted a project request ticket to Translatewiki .
Languages list
editIntegrations
edit- GlobalPreferences extension. Note: Implemented saving user settings globally via API if the extension is installed.
- Flagged Revisions extension. Note: Partially implemented. Displays the "View all pending changes" button in the Diff Dialog. Adds link actions on the Special:PendingChanges page.
- 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 temporary fork until the issues are resolved by the original author.
- diffedit by Jon Harald Søby. Note: The original script only fires once on page load. For a smoother experience, consider using a temporary fork until the issues are resolved by the original author.
- fancy-diffs by Enterprisey. Note: Tested and fully functional. No additional implementation required.
- 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.