RecentChangesMultiple

RecentChangesMultiple is designed for monitoring multiple wikis at once, giving one central location to view all the edits. While this script is designed to emulate standard recent changes as close as possible (pre UCP update design), there are many subtle differences (see Notes below).
This tool is designed primarily with Fandom wikis in mind, but should work for any wiki running on the MediaWiki codebase. For problems with non-Fandom wikis, click here.
This script can be found on GitHub, along with a changelog.
== ==
== ==
All that's truly needed after the script is installed is a with the rc-content-multiple class and a bullet list with the link of the wiki's domain (the will need to be added via source mode). Duplicate entries are ignored. Example:
*https://runescape.fandom.com/fr/
*wowpedia.fandom.com
*https://dev.fandom.com &bgcolor=green
== Basic Features ==
While not part of Special:RecentChanges, these are some additional features included by default.
* AjaxRC: Inspired by AjaxRC, an "auto-refresh" option is available, that when ticked will cause the list to be refreshed every 60 seconds. A cookie is used to store the setting of the checkbox once clicked.
** Notifications (optional): Upon activating, you'll be prompted to activate HTML5 notifications (optional), which will inform you of updates when you navigate away from the window/tab. To disable them after enabling them, click the gear icon on a notification.
* AjaxDiff: Inspired by AjaxDiff / QuickDiff / LastEdited, you can view the "diff" of a change without changing pages, by hitting the icon to the right of the "diff"/"prev"/"changes" link.
* AjaxGallery: By clicking the photo icon next to files changes (be it upload log or file page edit), you can preview the image it's related to. For grouped upload logs, you may preview a gallery of all images in the list.
* AjaxPagePreview: Allows you to view the page without leaving your current page.
** Note: This feature is fairly unpolished. Multiple CSS and JS files are not run on the preview. Thus the preview only uses the CSS from the current wiki to display pages. On browsers that support editing the shadow dom (Chrome as of writing this) or scoped styles (Firefox) some custom CSS from the wiki is applied (common.css it seems) as well as some JS is applied (for shadow dom), though still not all. It's still good for viewing comments/walls message in most cases, but for article viewing keep in mind the page may appear broken / different than expected.
* Discussions: Inspired by DiscussionsFeed, you may now see discussions in the script. See below for information on various caveats.
* Social Activity: Content found on Special:SocialActivity is also included on the list by default.
* Abuse Logs: If a wiki on the list has the AbuseFilter extension enabled, a filter option to list abuse logs will appear.
* Wiki Info Panel: Clicking one of the favicons in the "wikis loaded" section at the top of the script (or along the left side of the script) will give you a list of links to some common pages for that specific wiki, as well as some statistics for that wiki. This panel also allows you to temporarily hide wikis encase one wiki on the list is to busy. If the instance only has one wiki, this panel will open by default.
* Multiple instances: Multiple instances ("containers") may be run on the same page.
** This includes those within tabbers.
** It is possible to have each instance only load 1 wiki, thus allowing a more typical recemt chamges design while still viewing multiple wikis on 1 page. It's also possible to refresh all instances using the rcm-refresh-all feature.
** Keep in mind however that some of the additional parameters below are only checked on the first instance and affect all those on the page (data-lang, data-hiderail, data-loaddelay, data-timezone).
== Additional Parameters ==
While the above works and that's all that may be needed, there are also many other additional parameters that can be added, in 3 ways: 1 that affects every RCM, 1 that affects every wiki on a specific RCM list, and one that affects a specific wiki.
=== URL variables ===
This affects every RCM on the page. Currently the only URL variables accepted are those used by a standard RecentChanges page. See more at RC Params below:
https://yourwiki.fandom.com/wiki/RecentChangesMultiplePage?hidemyself=1&days=7
=== Dataset ===
These affect every wiki / the script as a whole for a single instance.
Ones labeled [Global] only are checked on the first instance, and are used for all other instances. Note: If you edit global parameters in the UCP editor the changes won't appear until you refresh the page.
Name 	Expects 	Default	
data-params= 	Recent changes URL parameters 	- 	The exact params you would use on Special:RecentChanges, without the "?" after the title (ex: hidemyself=1&days=10&limit=50). See more at RC Params below.
data-hideusers= 	Comma separated list 	- 	A list of users you like to hide the edits of on all wikis, separated with commas. Do not include "User:", and whitespace may be included before/after the commas (white space/underscores in names is required).
data-timezone= 	String 	utc 	[Global] By default this script lists dates in UTC. If this attribute is set to local, the times listed will be based on the local time as determined by the web browser.
data-timeformat= 	String 	24 	[Global] By default this script lists times in 24 hour format. If this attribute is set to "12" then times are listed in 12 hour AM/PM format.
data-autorefresh= 	Whole number 	60 	The number of seconds for the script to wait to auto-refresh (if the auto-fresh box is checked). Any number above 0 is valid. Note that the time starts after a refresh has completely finished and all results have been added to the screen.
data-autorefresh-evenOnFocus=	Boolean 	true 	When auto-refresh is enabled, by default it will refresh the script even if you currently have the page open and are clicking / reading things. As this can be annoying, this option (if set to "false") will allow you to prevent the script from refreshing if the page has focus (last window you clicked and your current tab).
data-notifications-hideusers=	Comma separated list 	- 	A list of users you do not want to see auto-refresh notifications about when they edit, separated with commas. Do not include "User:", and whitespace may be included before/after the commas (white space/underscores in names is required).
data-discussions-enabled= 	Boolean or comma separated list	true 	Lists Fandom discussions for each wiki. Set to "false" to disable or give a comma seperated list of the types of discussions/social acitivity you do want: FORUM (discussions), WALL, and/or ARTICLE_COMMENT (options panel toggle overrides this). See below for more info.
data-abuselogs-enabled= 	Boolean 	false 	Set to true to enable. Note that abuse logs are "separate" from typical logs (similar to discussions), although it doesn't require an additional API call (instead just making the initial API call return more abuse-log-only values).
Show/hide advanced options (not necessary for most people)
Advanced options 	Advanced options 	Advanced options	Advanced options
Name 	Expects 	Default 	
data-lang= 	Country code 	auto-detect 	This is the language used when translating text in the script. By default, this script uses the language set in your user settings (or wiki language if anon) to display a language if supported, or "en" if the language if not supported (except for recent changes text, which is taken directly from the server and should always be supported). For those whose language isn't supported but don't wish to use English as the translation, set this to a 2 letter language code ("fr", "pl", etc.).
data-onlyshowusers= 	Comma separated list	- 	If a list of users exists, the script will only show edits by these user(s), hiding all non-specified user edits. hideusers (both dataset (above) and wiki-specific (below)) takes precedence. Do not include "User:", and whitespace may be included before/after the commas (white space/underscores in names is required).
data-ajaxlinks= 	Boolean 	false 	Set to true to enable. When enabled, various links will behave the same (on click) as their icon counterpart: "diff" and "changes" links will open ajax diffs, and "Upload log" and file names (when not in a log and is the page that was changed) will open the ajax gallery.
data-hiderail= 	Boolean 	true 	[Global] By default any page that includes a .rc-content-multiple will have its rail hidden (so it takes up whole page, like normal RC). This parameter is simply a way to reverse this, if desired, when this parameter is equal to false.
data-autorefresh-enabled=	Boolean 	false 	If no cookie is present, this controls whether or not the "Auto refresh" feature is enabled by default. Setting it to "true" will enable it by default.
data-loaddelay= 	Number 	10 	[Global] The time (in milliseconds) to wait between loading wikis. Only time this is needed to be increased is when loading a large number of wikis (100+) to avoid load limit and being blocked temporarily.
data-extraLoadingEnabled=	Boolean 	true 	Since not all information can be retrieved in the initial call (since it requires the initial information), it's loaded after all content is added to the screen. Since this is not strictly needed, this offers a way to turn it off (possibly to limit server calls or to save on bandwidth). Currently this is required for:
* Displaying forum / wall titles as well as fixing the link to the page.
* Displaying discussion titles.
* Adding user link classes for user groups / if user is blocked.
data-localSystemMessages=	Boolean 	true 	[Global] Some wikis are restricted from public access, including the wiki's API. While this normally wouldn't matter if not monitoring it, running this script on such a wiki prevents access to system messages which the script relies on for language support. Setting this to "false" will instead retrieve system messages from community central. This is not necessary if running the script in English. This is true by default as system messages for a wiki can be personalized and using local ones will allow the script to use them to (for fun / consistency), as well as removing an external dependency.
; 
Datasets go directly inside the , like so:
=== On List Items ===
Every item on the list must start with the wiki's base URL, in the format "name.fandom.com" (or name.fandom.com/lang/, or "wikiname.com" (or other top level domain if the wiki doesn't have "fandom"/"wikia" in it).
These allow you to customize a specific wiki's results, instead of requiring every wiki listed to use the same options.
Each list item may have parameters added to add additional functionality for how that wiki is displayed / loaded. This can be done in one of two ways:
* Adding ¶mname= after the URL. ex: dev.fandom.com &bgcolor=green
* Adding a sub list below the entry (with or without a "&" in front of param name). ex:
*dev.fandom.com
**bgcolor=green
Name 	Expects 	Default 	
¶ms= 	Recent changes URL parameters 	- 	Same as data-params, except "&"s must be turned into commas (","), and "="s into colons (":"). See also RC Params below.
&hideusers= 	Comma separated list 	- 	Much like the data-hideusers= above, this accepts a comma-separated list of users, but instead they are only hidden for the specified wiki. Do not include "User:".
&onlyshowusers= 	Comma separated list 	- 	Much like the data-onlyshowusers= above, this accepts a comma-separated list of users, but instead it only triggers for the specified wiki. Do not include "User:".
¬ifications_hideusers= 	Comma separated list 	- 	Much like the data-notifications-hideusers= above, this accepts a comma-separated list of users, but instead it only triggers for the specified wiki. Do not include "User:".
¬ifications_enabled= 	Boolean 	true 	Set to false to prevent edits on this wiki from sending out notifications. Note: if you wish to disable notifications for the whole script, don't use script settings; instead use your native browser way to disable notifications you accepted (usually click the gear icon on a notification that pops up).
Special cases for properly displaying wikis	Special cases for properly displaying wikis	Special cases for properly displaying wikis	Special cases for properly displaying wikis
&scriptdir= 	Text 	- 	(for non-Fandom wikis) The sub-directory of the wiki scripts should access for the api. Ending "/" should not be included. By default the script checks the root of the domain (as this is how it is on Fandom), but for some wikis it may be something else (popular directories are "/w" and "/wiki"). An easy way to find a wiki's API directory is to enter "console.log(mw.config.get("wgScriptPath"));" in your browser's console on that respective wiki. Or for newer wikis, go to Special:Version and select "Script path" under the "Entry point URLs" section.
&username= 	Text 	- 	This is only "required" for non-Fandom wikis. Since external usernames are not known, this allows you to specify it for a wiki. This allows "hidemyself" to work, as well as detecting user rights (for displaying "block" links and such). If you don't care about these features, this can be left out. When a Fandom wiki is listed, this is not required as it checks the currently logged in user (although if you have a different accounts for a different Fandom wikis, this could be used).
&favicon= 	URL (without https://) 	- 	Replaces the favicon used for the wiki with the one specified. Simply include the full URL without the "https://". Intended for wikis that don't have favicons or if the default one is too similar to another wiki on the list.
&bgcolor= 	CSS background 	- 	If set, the recent changes for this wiki will show this background color behind them (instead of the favicon tiled). Any valid CSS "background" value will work (even none, rgb(), or url()). It is also possible to tweak other values by chaining CSS (ex: &bgcolor=orange;opacity:0.5). bgcolor opacity is 0.1 by default.
; 
*https://fewfre.fandom.com &hideusers=Fewfre,FewBot
*https://pixelmonmod.com &scriptdir=wiki¶ms=hidemyself:1,limit:5
*https://wiki.guildwars2.com
**favicon=wiki.guildwars2.com/images/thumb/d/df/GW2Logo_new.png/180px-GW2Logo_new.png
=== Options Panel ===
Offers a way to tweak "data-params=" options in real-time. The options panel does have a setting to remember the options you changed via localStorage (off by default). Any options changed before turning this feature on will also be remembered. Clicking this off again will remove the info from storage. One of the above methods should be used if you want the change to persist on a different computer / without using localStorage. The options panel also allows a way to toggle Fandom Discussions on/off.
Due to these options changing display requirements, all current changes listed on the page will be cleared and then refreshed.
=== RC Params ===
To help emulate Special:RecentChanges as much as possible, this script accepts RC-style URL params (used as explained above with "data-params", "¶ms", URL variables, or the options panel). There are multiple params, as explained below. Please note that these affect each wiki individually (so a limit of 50 for 4 wikis is actually a limit of 200 total).
There are a few ways to specify params in the script. If more than one is specified, they will "fall through", with the more specific one overwriting the less specific one (ex: "¶ms" is more specific than "data-params"), but only if they both change the same thing (such as "days"). The order of specificity is as such:
# [Default values]
# User settings - uses the 4 settings under "Special:Preferences > Under the Hood > Recent changes"
# URL variables – same as a normal recent changes page.
# data-params
# Options panel (run-time options)
# ¶ms (note that the "options panel" will not overwrite these)
Note that for "true/false" boolean switches, "0" is false, and "1" is true.
 Available parameters
Parameter 	Default 	
limit 	50 	This can be any whole number between 0-500 (may be less depending on "days").
days 	7 	Number of days (may be less depending on "limit").
hideminor 	0(false) 	Hides edits that were marked as "minor".
hidebots 	1(true) 	Hides edits done by a bot.
hideanons 	0(false) 	Hides edits done by anonymous users.
hideliu 	0(false) 	Hides edits done by logged-in users.
hidemyself 	0(false) 	Hides edits done by the account you are logged in as. Note: "hide-users=" will override this (even when using options panel). Also note that external wikis require the use of "&username=" (see above) for this to work.
hideenhanced 	0(false) 	Doesn't show group edits, instead showing each edit in the order they were done. Note: Isn't supported on a wiki-per-wiki basis (all or nothing).
hidelogs 	0(false) 	Hides logs.
hidenewpages 	0(false) 	Hides any page creation recent changes.
hidepageedits 	0(false) 	Hides any page edits (not counting page creations).
namespace 	none 	By default, all namespaces are shown. Shown namespaces can be limited by adding the namespace number to be shown. If more than one namespace is to be shown, the namespaces must be separated with a "|" and no spaces (ex: 1|10|2001 to only show Talk and Template).
Unsupported Parameters 	Unsupported Parameters 	Unsupported Parameters
from, invert, associated, tagfilter, hidewikidata, and any others not listed.Feel free to request support for an unsupported parameter to be added if you need it; all should be more or less possible.	from, invert, associated, tagfilter, hidewikidata, and any others not listed.Feel free to request support for an unsupported parameter to be added if you need it; all should be more or less possible.	from, invert, associated, tagfilter, hidewikidata, and any others not listed.Feel free to request support for an unsupported parameter to be added if you need it; all should be more or less possible.
== Extra Features ==
=== Refresh All ===
* If using multiple instances on the same page, they can all be refreshed at once by giving the "rcm-refresh-all" class to an element on the page. ex:
=== CSS Styling ===
This script uses as many default recent changes classes as possible to allow styling to be consistent. Most RCM-specific features also use class names to allow for customization. Some useful classes are:
* .rc-entry-$1 surrounds an entire entry / entry group, with $1 being the URL domain with dots as dashes (ex: "dev-fandom-com"). By default this is used to style ".rcm-tiled-favicon", but it can be used to customize any data different based on its wiki.
* .rc-entry-ns-$1 surrounds an entire entry / entry group, with $1 being the number of a namespace (ex: 0 for mainspace, 1 for talk, etc).
* .rcm-favicon-goto-button represents the icon to the left of each entry. Can be used to modify the icon / remove it.
So long as "data-extraLoadingEnabled" is not turned off, user links also have attributes added once the data is fetched. .rcm-userblocked signifies a user is blocked on that wiki, .rcm-usergroup-$1 allows you to customize names based on the user's group (with "$1" being the unique ID for that group), and .rcm-useranon is added for anonymous users. You can find common group IDs [ here] (listed as "group-$1") and you can find a list of all groups (and the rights that come with them if curious) [/api.php?action=query&format=xml&list=&meta=siteinfo&siprop=usergroups here]; simply change the wiki in the URL to see it for your target wiki (if it has a custom group). ex: .rcm-usergroup-content-moderator
There are many other classes (either custom or recent changes classes) that can be utilized to customize the script. Best way to find them is to just inspect the element you want to customize and go from there.
== Discussions ==
In late 2016 Fandom started pushing their discussion system onto new wikis, eventually working towards placing it on all wikis. Edits made inside the discussion area do not show up inside recent changes, so support has to be tacked on. This has a few potentially unexpected results:
* As of 2020, wikis that have had their MediaWiki version updated will have any Message Walls and Article Comments moved into the discussion system (although not showing up in the Discussions page). As such, most of the notes here apply to them as well.
* Discussions are turned on by default. It can be toggled off on the option panel, or via the data-discussions-enabled attribute.
* Not all discussions have titles, so if a title is not present, the first 35 characters of the original post are used to identify it instead.
* As the title of a thread is not included in the API information returned for a specific post, titles often need to be retrieved separately (using the same second-load mechanic as wall/forum titles; just like those, this feature can be disabled via the data-extraLoadingEnabled attribute).
* Many options do not affect discussions. Some that do work are: hidemyself, hideusers, onlyshowusers, limit & days (see below for specifics).
** limit - only goes up to 50. Having a limit less than 50 will work.
** hidemyself / hideusers - will affect the max number of discussions you see (since these are removed from the loaded list).
* These changes are loaded in addition to normal changes. If a limit is set to less than or equal to 50, this can possibly double the results displayed for that wiki.
* Discussions are only checked for on Fandom wikis (as they are Fandom-specific). However, the first time a script loads changes it needs to check all wikis to see if they exist. If they return a 404, an attempt to load that specific wiki will not happen again.
* Since the API returns avatars and vote totals, this information is included as well. They can be removed with custom CSS using the .rcm-avatar and .rcm-upvotes classes respectively.
* Due to how the API works, edits to posts are not shown as a separate change. Instead the post will simply appear higher up on the list (if it's creation date is still within the top 50). One possible unexpected side-effect this has is that if someone edits a post the day after they created it, it won't show up under both days.
== HTTPS ==
Since all Fandom wikis have HTTPS enabled, you will not be able to load content from wikis without HTTPS.
If you are having HTTPS loading issues running the script on a fandom.com wiki, try changing any wikia.com wiki links in your list to fandom.com. All wikia wikis are now converted to Fandom, so shouldn't be an issue.
This issue will still affect some external wikis however that will continue to run without HTTPS. There is currently no workaround for this issue.
== Non-Fandom wikis ==
This tool is designed primarily with Fandom wikis in mind, but should work for many wikis by default, and has some settings to handle special cases for certain non-Fandom wikis (such as "&scriptdir=" above). When adding non-Fandom wikis, it's important to note that this script is designed for MediaWiki wikis only, and requires the Mediawiki API to be enabled on a wiki to run (usually on, but some wikis do have it turned off).
Also note that as Fandom uses HTTPS, wikis running on HTTP cannot be loaded using this script.
== Notes ==
* "Red links" for pages that don't exist won't show up on most logs, since this information would have to be retrieved individually for every page. Ones that do show up red were retrieved that way by default.
* Patrolling not supported at this time. This is due to MediaWiki security that prevents patrol info from being accessed unless authorized (severely breaking to script if it attempts it without authorization). Even if the right exists, the info cannot be accessed due to login being required on that wiki which is not available via cross-domain (browser security).
* Logs:
** Logs may do weird things on "rare" cases (like staff-only actions and rare extension-only actions). Support for these can be added, but aren't in by default since each needs to be manually checked for each type (and sometimes each specific action).
** (Rights log) – the rights will be listed using their ID instead of a translation of the user group. So it'll be things like sysop. Not all wikis have same groups, so getting translations from each wiki is more of a burden than it's worth.
* This script retrieves recent changes translations directly from the server. As such translations might differ when using non-Fandom wikis. If the loading failed enough times, it'll just default to English text.
== Other ==
* "http://" shouldn't be used in this script to avoid it automatically becoming a link (makes it annoying to deal with), and shows up on Special:LinkSearch as a page with an external link (may be undesirable).
* Designed for Fandom wikis, but should work for any wiki (assuming it's not too out-of-date).
* Some non-Fandom wikis simply do not seem to work, due to how they are setup (MediaWiki version is to old, API disabled, etc.).
* The script should be run using code.2.js. Although no longer supported, the original atom-feed version can be found at code.js, with documentation for it found here.
== Requirements ==
* JQuery
* All wikis in the script must:
** Be MediaWiki wikis (version 1.16+).
** Have the MediaWiki API available.
* Browser that supports various aspects of ECMAScript5 (any up-to-date browser will basically be fine).
* The script has to run on a Fandom wiki (to make sure it have access to things like the code for collapsing lists).