Hey there. Just popping in to let you know about a strange issue I seem to be having with FilterNotes, which is that I'm getting an error of "Failed to parse notes. Use 'Edit notes' button to view", appearing on every filter. Using edit notes does indeed show the raw notes, and adding notes works as usual, it's just an issue with viewing without editing. EggRoll97(talk) 14:03, 17 May 2025 (UTC)
I also noticed another issue when using this script in dark mode - it has poor contrast which results in that you cannot see the text, and the links are barely visible. Codename Noreste (talk · contribs) 23:00, 4 July 2025 (UTC)
Hi Suffusion of Yellow. For move filters, would it be possible to add a (move) view that succinctly includes the most important information used by page move filters? More specifically, I think something like the expression: moved_from_prefixedtitle + " (" + moved_from_namespace + ") → " + moved_to_prefixedtitle + " (" + moved_to_namespace + ")" would be useful (perhaps with line breaks before and after the arrow). Daniel Quinlan (talk) 17:39, 22 May 2025 (UTC)
@Daniel Quinlan: Sorry for the late response. I just started implementing your suggestion, but now that I look at it, it feels kind of redundant. moved_from_prefixedtitle is exactly the same as the title in the header, so it's shown twice. And moved_to_prefixedtitle can be selected from the dropdown. Is having the namespace number really that useful? Suffusion of Yellow (talk) 20:52, 4 July 2025 (UTC)
No worries. Thanks for getting to it. I've found putting everything together on one line helpful visually although I agree it's somewhat redundant. I've tried without the first variable in the expression and it doesn't work as well and it looks awful. The namespace numbers are sometimes helpful for filters heavy on namespace numbers like 1354. The defaults of (diff) and (matches) are often not useful for move filters so perhaps it would be worth a broader examination. I was mostly just hoping for something easy to select that showed something more helpful than the defaults. I'm open to other ideas. Thanks. Daniel Quinlan (talk) 21:24, 4 July 2025 (UTC)
Potential update to FilterDebugger regarding a deprecated filter variable
Hello everyone, and welcome to the 27th issue of the Wikipedia Scripts++ Newsletter, covering all our favorite new and updated user scripts since 2025! Boy, does it feel good to kick off the year with an issue. Yep, it's been a year since we cleared out the 2022-2024 backlog with issues 23 and 24! Good times. Though in this case "a year" just means... 6 months? 😯 The salience of whatever joke I was planning to make here has vanished speedily. Aaron Liu (talk) 21:00, 31 July 2025 (UTC)
Got anything good? Tell us about your new, improved, old, or messed-up script here!
Featured script
WikiTextExpander by Polygnotus, is this edition's featured script. At the click of a configurable hotkey, this script will find and replace or link a configurable list of phrases within the selected text in all source editors (even in the comment/reply field!). Besides allowing the quick insertion of templated messages, this script greatly mitigates the WP:WTF? problem by providing both the legibility of familiar words and the convenience of shortcuts. And to those asking, the capitalization of "Wikitext" as "WikiText" was a necessary sacrifice for far-more-memorable acronymy.
Updated scripts
CanonNi: AlertAssistant has been fixed and rewritten using OOUI instead of Twinkle's Morebits. Such modern, very tool. (Do note that the maintainer has since become inactive.)
NguoiDungKhongDinhDanh/AjaxLoader has been updated to use modern JS APIs that replace the browser's URL bar with the link you clicked on to load in place. The "back" (and "forward") buttons also work now. Cool, innit?
andrybak: Unsigned helper no longer shows an error when the message to sign was added in the earliest 50 revisions of a page's history. This is especially relevant to pages with short histories.
BilledMammal/Move+ needs updating to order list of pages handle lists of pages to move correctly regardless of the discussion's page, so that we may avoid repeating fiasco history.
Requested scripts
We need scripts that...
allow sorting lists of citations such as by URI or other identifier
automatically convert the capitalization of citations' titles
collect a list of discussion participants and generate a ping list
In breaking m:Tech/News, Gadgets can now include .vue files. This makes it easier to develop modern user interfaces using Vue.js, in particular using Codex, the official design system of Wikimedia. Codex icons are now also available. The documentation has examples.
New scripts
Appo/Globstory integrates OpenHistoryMap, updating the map whenever hovering/clicking on a location or year, the latter of which changes the map to be (hopefully) accurate to the year selected. It's pretty interesting.
linkinfo Somewhat similar to WP:NavPops, Awesome Aasim/linkinfo(pictured) provides a collection of links to replace the right-click context menu, presented beautifully.
PreviousDiscussions provides a link to search for your username on subpages of another user's userpage and talkpage conveniently.
Twineeea/noRedLinks brings you to the "read" instead of the "create" tab when you visit a red link. Contemplate life's mysteries as you stare into the blank! Deeply.
No, this is not going to be the enduring tradition of S++ for the future. This was meant to be a joke for the special occasion on the first day of the fourth month but was delayed by four months because I'm lazy.
Hi Suffusion of Yellow. Would it be possible to avoid applying the default limit of 100 when a list of log IDs is manually entered in the box on the right? Or maybe provide some sort of visual indicator that the log IDs will be truncated? It's not a big deal if it stays as is, but I've unexpectedly run into this a few times. Thanks. Daniel Quinlan (talk) 01:17, 17 August 2025 (UTC)
Done. Just ignoring the limit entirely when any ids are specified. Suffusion of Yellow (talk) 23:24, 30 August 2025 (UTC)
Hi Suffusion of Yellow. I ran into a "too much recursion" error today here (the error is more consistent with the 36726 version of filter 614). The lines causing the problem are the normalization steps next to /* first match is same as first match in removed text */. It looked like I had fixed with the current version, but the error comes back some of the time. Would it be possible to slightly increase the maximum depth allowed? I'm still using the development version of the debugger. Thanks. Daniel Quinlan (talk) 21:46, 22 August 2025 (UTC)
@Daniel Quinlan: That error is actually being passed through from Firefox's regex engine. Unfortunately, I don't know a way around it. Chromium takes over two minutes (!) to finish evaluating that one on my 15-year-old laptop, but it might be faster on your machine. Suffusion of Yellow (talk) 22:39, 30 August 2025 (UTC)
Ah, thanks for explaining. Is there a way to view the JavaScript regexes that get generated from filter regexes? And, if possible, can the transformation code be used from other scripts? (I want to write some test code.) Daniel Quinlan (talk) 23:50, 30 August 2025 (UTC)
I will probably put something up on GitHub/GitLab "when I get around to it". In the meantime I just the split out the regex module into its own page in my userspace. Try from your browser console:
Hello, Suffusion of Yellow. This message is being sent to remind you of significant upcoming changes regarding logged-out editing.
Starting 4 November, logged-out editors will no longer have their IP address publicly displayed. Instead, they will have a temporary account (TA) associated with their edits. Users with some extended rights like administrators and CheckUsers, as well as users with the temporary account IP viewer (TAIV) user right will still be able to reveal temporary users' IP addresses and all contributions made by temporary accounts from a specific IP address or range.
How do temporary accounts work?
Editing from a temporary account
When a logged-out user completes an edit or a logged action for the first time, a cookie will be set in this user's browser and a temporary account tied with this cookie will be automatically created for them. This account's name will follow the pattern: ~2025-12345-67 (a tilde, year of creation, a number split into units of 5).
All subsequent actions by the temporary account user will be attributed to this username. The cookie will expire 90 days after its creation. As long as it exists, all edits made from this device will be attributed to this temporary account. It will be the same account even if the IP address changes, unless the user clears their cookies or uses a different device or web browser.
A record of the IP address used at the time of each edit will be stored for 90 days after the edit. Users with the temporary account IP viewer (TAIV) user right will be able to see the underlying IP addresses.
As a measure against vandalism, there are two limitations on the creation of temporary accounts:
There has to be a minimum of 10 minutes between subsequent temporary account creations from the same IP (or /64 range in case of IPv6).
There can be a maximum of 6 temporary accounts created from an IP (or /64 range) within a period of 24 hours.
Temporary account IP viewer user right
How to enable IP Reveal
Administrators may grant the temporary account IP viewer (TAIV) user right to non-administrators who meet the criteria for granting. Importantly, an editor must make an explicit request for the permission (e.g. at WP:PERM/TAIV)—administrators are not permitted to assign the right without a request.
Administrators will automatically be able to see temporary account IP information once they have accepted the Access to Temporary Account IP Addresses Policy via Special:Preferences or via the onboarding dialog which comes up after temporary accounts are deployed.
Impact for administrators
It will be possible to block many abusers by just blocking their temporary accounts. A blocked person won't be able to create new temporary accounts quickly if the admin selects the autoblock option.
It will still be possible to block an IP address or IP range.
Temporary accounts will not be retroactively applied to contributions made before the deployment. On Special:Contributions, you will be able to see existing IP user contributions, but not new contributions made by temporary accounts on that IP address. Instead, you should use Special:IPContributions for this (see a video about IPContributions in a gallery below).
Rules about IP information disclosure
Publicizing an IP address gained through TAIV access is generally not allowed (e.g. ~2025-12345-67 previously edited as 192.0.2.1 or ~2025-12345-67's IP address is 192.0.2.1).
Publicly linking a TA to another TA is allowed if "reasonably believed to be necessary". (e.g. ~2025-12345-67 and ~2025-12345-68 are likely the same person, so I am counting their reverts together toward 3RR, but not Hey ~2025-12345-68, you did some good editing as ~2025-12345-67)
Hello! Voting in the 2025 Arbitration Committee elections is now open until 23:59 (UTC) on Monday, 1 December 2025. All eligible users are allowed to vote. Users with alternate accounts may only vote once.
The Arbitration Committee is the panel of editors responsible for conducting the Wikipedia arbitration process. It has the authority to impose binding solutions to disputes between editors, primarily for serious conduct disputes the community has been unable to resolve. This includes the authority to impose site bans, topic bans, editing restrictions, and other measures needed to maintain our editing environment. The arbitration policy describes the Committee's roles and responsibilities in greater detail.
If you wish to participate in the 2025 election, please review the candidates and submit your choices on the voting page. If you no longer wish to receive these messages, you may add {{NoACEMM}} to your user talk page. MediaWiki message delivery (talk) 00:32, 18 November 2025 (UTC)
Blame.js
Hi Suffusion of Yellow! Would you be open to updating to using User:Daniel Quinlan/Scripts/Blame instead of FilterBlame? It's much faster, has a better interface, and it also supports regular pages.
By the way, your importScriptSafe function is very interesting. You might consider passing a specific revision instead of a hash so it won't break on updates (you could still pass a hash along with the revision, but it seems unnecessary). Daniel Quinlan (talk) 04:59, 7 March 2026 (UTC)
Done, thanks for the notice. Yeah, using oldid= is tempting, but as discussed here, it means the script won't be updated if it has an XSS bug, etc. I'm thinking about maybe some sort of semi-intrusive "you have out of date scripts" message, along with links to the page histories, and an "update" button to automatically edit my common.js with new IDs. Suffusion of Yellow (talk) 18:28, 7 March 2026 (UTC)
Filter tweaks
Thanks for that change to that filter, I think that will still work about as good as can be expected with far fewer FPs. OhNoitsJamieTalk 01:02, 10 April 2026 (UTC)
Possessive quantifiers and atomic groups
Hi Suffusion of Yellow! Would it be possible to have FilterDebugger "degrade" possessive quantifiers and atomic groups in abuse filters rather than producing an error (perhaps with a warning)? It seems plausible to change possessive quantifiers to plain quantifiers and atomic groups to regular groups. The no-backtrack semantics would be lost, but the results should be closer to production. There are only a few filters that use possessive quantifiers right now so if this would be more trouble than it's worth, no worries. Thanks! Daniel Quinlan (talk) 00:43, 16 May 2026 (UTC)
I'd rather not have too many "subtle" differences between FilterDebugger and AbuseFilter. But this hack might work. Maybe I'll give it a try. OTOH I've tried compiling libpcre2 with emscripten, expecting the performance to be terrible. Actually, it's almost as fast as Firefox's native engine! But it will take a bit of work to fully integrate it. Right now I need to switch from CodeEditor to CodeMirror before the the module disappears, so that's my priority. Suffusion of Yellow (talk) 20:21, 31 May 2026 (UTC)