Page MenuHomePhabricator

Remove deprecated sajax js library from MediaWiki core
Closed, ResolvedPublic

Description

This cannot go forwards until time has been given to fix (core, extension, gadgets, user) scripts that will break, which requires notification.''

Cloning this bug from T42785 comment 7.

Core is no longer using Sajax and anyone else trying to use it will get JS console warnings if debug=true.
However, the sajax library is still in core. It can't be removed until extensions have stopped using it - particularly SecurePoll, which is in use on Wikimedia wikis, but maybe we should also allow time for BlogPage, CommunityVoice, DonationInterface (this seems sort of used on Wikimedia sites, not 100% sure about that), Drafts, OnlineStatus, and ReaderFeedback (there may be others that I've missed) to stop using it.

Timeline:

See also:
T42786: Remove AjaxDispatcher from MediaWiki core

Related Objects

Event Timeline

There are a very large number of changes, so older changes are hidden. Show Older Changes
krenair@terbium:~$ mwgrep sajax
[...]
(total: 297, shown: 100)

hmm :/

(total: 279, shown: 100)

It's trending in the right direction at least

reedy@terbium:~$ mwgrep sajax --max-results 300 | grep -v \) | cut -c21- | sort -n | uniq -c
      1 MediaWiki:AjaxTranslation.js
      1 MediaWiki:AlertFreeUseImage.js
      4 MediaWiki:AlertProtected.js
      3 MediaWiki:Comments.js
     20 MediaWiki:Common.js
      5 MediaWiki:Common.js/documentation tab.js
      1 MediaWiki:Common.js/edit.js
      1 MediaWiki:Common.js/Edit tools.js
      1 MediaWiki:Common.js/mwbot.js
      1 MediaWiki:Common.js/Tm.js
      3 MediaWiki:Dictionary.js
      1 MediaWiki:Gadget-afchelper.js
      1 MediaWiki:Gadget-AJAX-esikatselu.js
      1 MediaWiki:Gadget-AjaxMassRB.js
      1 MediaWiki:Gadget-ajaxrecentchanges.js
      1 MediaWiki:Gadget-AlertaRev.js
      1 MediaWiki:Gadget-api.js
      2 MediaWiki:Gadget-autocomplete.js
      1 MediaWiki:Gadget-BandeauxPages.js
      3 MediaWiki:Gadget-BandeauxPortails.js
      1 MediaWiki:Gadget-bracketmatch.js
      1 MediaWiki:Gadget-Bracketmatch.js
      4 MediaWiki:Gadget-catinsert.js
      1 MediaWiki:Gadget-ChangeCategorie.js
      1 MediaWiki:Gadget-checkVoteRights.js
      1 MediaWiki:Gadget-closeAFD.js
      5 MediaWiki:Gadget-CommentWatch.js
      1 MediaWiki:Gadget-Contributions.js
      1 MediaWiki:Gadget-CustomSideBarLinks.js
      1 MediaWiki:Gadget-DeveloppementJavaScript.js
     23 MediaWiki:Gadget-dropdown-menus.js
      2 MediaWiki:Gadget-dropdown-menus-nonvector.js
      3 MediaWiki:Gadget-EnhancedInterwikis.js
      2 MediaWiki:Gadget-Flickrfixr.js
      5 MediaWiki:Gadget-hotcat.js
     46 MediaWiki:Gadget-HotCat.js
      1 MediaWiki:Gadget-HotCats.js
      2 MediaWiki:Gadget-HotCatsMulti.js
      6 MediaWiki:Gadget-InterwikiOrder.js
      2 MediaWiki:Gadget-LiveRC.js/Extensions/HotCatsMulti.js
      4 MediaWiki:Gadget-markblocked.js
      1 MediaWiki:Gadget-massblock.js
      2 MediaWiki:Gadget-massdelete.js
     11 MediaWiki:Gadget-metadata.js
      4 MediaWiki:Gadget-modrollback.js
      1 MediaWiki:Gadget-PagesSansBandeauDePortail.js
      1 MediaWiki:Gadget-PageWatcher.js
      3 MediaWiki:Gadget-patrollinks.js
      1 MediaWiki:Gadget-Pratik menu.js
      1 MediaWiki:Gadget-PrettyLog.js
      6 MediaWiki:Gadget-preview.js
      5 MediaWiki:Gadget-QPreview.js
      1 MediaWiki:Gadget-qualityArticles.js
      1 MediaWiki:Gadget-QualityRibbon.js
      1 MediaWiki:Gadget-quickpreview.js
      1 MediaWiki:Gadget-rcPatrol.js
      2 MediaWiki:Gadget-readyAlert.js
      1 MediaWiki:Gadget-sablonmester.js
      2 MediaWiki:Gadget-saveandedit.js
      1 MediaWiki:Gadget-show-patrol-log.js
      1 MediaWiki:Gadget-Suggest.js
      9 MediaWiki:Gadget-TemplatePreloader.js
      2 MediaWiki:Gadget-TrollOptions.js
      7 MediaWiki:Gadget-userinfo.js
      1 MediaWiki:Gadget-util.js
      1 MediaWiki:Gadget-VigilaComentario.js
      2 MediaWiki:Mwapilib.js
      3 MediaWiki:Notifier.js
     16 MediaWiki:RefToolbarLegacy.js
      8 MediaWiki:Ticker.js
      2 MediaWiki:UploadForm.js
      1 MediaWiki:UploadFormTest.js
      1 MediaWiki:Upload.js
      1 MediaWiki:Voting10.js
      1 MediaWiki:Voting11.js
      1 MediaWiki:Voting12.js
      1 MediaWiki:Voting2.js
      1 MediaWiki:Voting3.js
      1 MediaWiki:Voting4bis.js
      1 MediaWiki:Voting4.js
      1 MediaWiki:Voting6.js
      1 MediaWiki:Voting7.js
      1 MediaWiki:Voting8.js
      1 MediaWiki:Voting9.js
      1 MediaWiki:Voting.js
      1 MediaWiki:Wikibugs.js
reedy@terbium:~$

And incase anyone is wanting to fix some...

reedy@terbium:~$ mwgrep sajax --max-results 300
acewiki             MediaWiki:Common.js
arwiki              MediaWiki:Gadget-BandeauxPortails.js
arwiki              MediaWiki:Gadget-InterwikiOrder.js
arwiki              MediaWiki:Gadget-saveandedit.js
arwiki              MediaWiki:Gadget-userinfo.js
arwikinews          MediaWiki:Gadget-HotCat.js
arwikinews          MediaWiki:Gadget-HotCat.js
aswiki              MediaWiki:Gadget-dropdown-menus.js
aswiki              MediaWiki:Notifier.js
aswiki              MediaWiki:RefToolbarLegacy.js
aswikisource        MediaWiki:Gadget-TemplatePreloader.js
azwiki              MediaWiki:Gadget-HotCat.js
azwikiquote         MediaWiki:Gadget-HotCat.js
azwikisource        MediaWiki:Gadget-HotCat.js
bawiki              MediaWiki:Common.js/documentation tab.js
bdwikimedia         MediaWiki:Gadget-HotCat.js
be_x_oldwiki        MediaWiki:RefToolbarLegacy.js
bgwiki              MediaWiki:Common.js/edit.js
bgwikinews          MediaWiki:Common.js
bgwikiquote         MediaWiki:Common.js
bgwikiquote         MediaWiki:Common.js/Tm.js
bgwiktionary        MediaWiki:Common.js
bhwiki              MediaWiki:Gadget-dropdown-menus.js
bjnwiki             MediaWiki:Common.js
bjnwiki             MediaWiki:Gadget-HotCat.js
bnwiki              MediaWiki:Notifier.js
bnwiki              MediaWiki:RefToolbarLegacy.js
bnwikisource        MediaWiki:Gadget-TemplatePreloader.js
bswiki              MediaWiki:Gadget-checkVoteRights.js
bswiki              MediaWiki:Gadget-patrollinks.js
bugwiki             MediaWiki:Gadget-HotCat.js
bxrwiki             MediaWiki:Gadget-HotCat.js
cawiki              MediaWiki:Common.js/documentation tab.js
cawiki              MediaWiki:RefToolbarLegacy.js
cawikiquote         MediaWiki:Common.js/documentation tab.js
cawikiquote         MediaWiki:RefToolbarLegacy.js
cawiktionary        MediaWiki:Common.js/documentation tab.js
cewiki              MediaWiki:Gadget-HotCat.js
cewiki              MediaWiki:Gadget-dropdown-menus.js
commonswiki         MediaWiki:Gadget-Flickrfixr.js
commonswiki         MediaWiki:Notifier.js
commonswiki         MediaWiki:UploadFormTest.js
dewiki              MediaWiki:Gadget-PrettyLog.js
dewikiversity       MediaWiki:Gadget-PageWatcher.js
elwikinews          MediaWiki:Comments.js
elwikinews          MediaWiki:Gadget-CommentWatch.js
elwikisource        MediaWiki:Gadget-TemplatePreloader.js
enwiki              MediaWiki:Gadget-dropdown-menus-nonvector.js
enwiki              MediaWiki:RefToolbarLegacy.js
enwikibooks         MediaWiki:Gadget-markblocked.js
enwikinews          MediaWiki:Gadget-CommentWatch.js
enwikinews          MediaWiki:Gadget-bracketmatch.js
enwikinews          MediaWiki:Gadget-readyAlert.js
enwikiquote         MediaWiki:Gadget-EnhancedInterwikis.js
enwikiquote         MediaWiki:Gadget-EnhancedInterwikis.js
enwikisource        MediaWiki:Dictionary.js
enwikisource        MediaWiki:Gadget-TemplatePreloader.js
enwikisource        MediaWiki:Gadget-massdelete.js
eowiki              MediaWiki:Common.js/documentation tab.js
eowikisource        MediaWiki:Gadget-TemplatePreloader.js
eswikinews          MediaWiki:Gadget-AlertaRev.js
eswikinews          MediaWiki:Gadget-VigilaComentario.js
fawiki              MediaWiki:Gadget-InterwikiOrder.js
fawiki              MediaWiki:Gadget-LiveRC.js/Extensions/HotCatsMulti.js
fawiki              MediaWiki:Gadget-Suggest.js
fawiki              MediaWiki:Gadget-dropdown-menus.js
fawiki              MediaWiki:Gadget-metadata.js
fawiki              MediaWiki:Gadget-userinfo.js
fawiki              MediaWiki:RefToolbarLegacy.js
fawiki              MediaWiki:UploadForm.js
fawikibooks         MediaWiki:Gadget-HotCat.js
fawikinews          MediaWiki:Comments.js
fawikinews          MediaWiki:Gadget-CommentWatch.js
fawikinews          MediaWiki:Gadget-HotCat.js
fawikinews          MediaWiki:Mwapilib.js
fawikiquote         MediaWiki:Gadget-dropdown-menus.js
fawikisource        MediaWiki:Gadget-HotCat.js
fawikivoyage        MediaWiki:Gadget-userinfo.js
fawikivoyage        MediaWiki:Ticker.js
fawiktionary        MediaWiki:Gadget-HotCat.js
fawiktionary        MediaWiki:Gadget-userinfo.js
fawiktionary        MediaWiki:RefToolbarLegacy.js
fiwiki              MediaWiki:Gadget-util.js
fiwikibooks         MediaWiki:Gadget-AJAX-esikatselu.js
fiwikinews          MediaWiki:Common.js
frwiki              MediaWiki:Gadget-DeveloppementJavaScript.js
frwiki              MediaWiki:Gadget-PagesSansBandeauDePortail.js
frwikibooks         MediaWiki:Gadget-HotCats.js
frwikinews          MediaWiki:Gadget-BandeauxPages.js
frwikinews          MediaWiki:Gadget-HotCatsMulti.js
frwikisource        MediaWiki:Gadget-BandeauxPortails.js
frwikisource        MediaWiki:Gadget-ChangeCategorie.js
frwikisource        MediaWiki:Gadget-HotCatsMulti.js
frwikisource        MediaWiki:Gadget-QualityRibbon.js
gagwiki             MediaWiki:Gadget-HotCat.js
hewiki              MediaWiki:AlertFreeUseImage.js
hewiki              MediaWiki:AlertProtected.js
hewiki              MediaWiki:Gadget-TrollOptions.js
hewikibooks         MediaWiki:AlertProtected.js
hewikibooks         MediaWiki:Gadget-InterwikiOrder.js
hewikibooks         MediaWiki:Gadget-QPreview.js
hewikibooks         MediaWiki:Gadget-TrollOptions.js
hewikinews          MediaWiki:AlertProtected.js
hewikiquote         MediaWiki:Gadget-CustomSideBarLinks.js
hewikiquote         MediaWiki:Gadget-InterwikiOrder.js
hewikiquote         MediaWiki:Gadget-QPreview.js
hewikiquote         MediaWiki:Gadget-rcPatrol.js
hewikisource        MediaWiki:Gadget-InterwikiOrder.js
hewikisource        MediaWiki:Gadget-QPreview.js
hewikivoyage        MediaWiki:AlertProtected.js
hewikivoyage        MediaWiki:Gadget-Contributions.js
hewikivoyage        MediaWiki:Gadget-HotCat.js
hewikivoyage        MediaWiki:Gadget-QPreview.js
hiwiki              MediaWiki:Gadget-dropdown-menus.js
hiwiki              MediaWiki:Gadget-metadata.js
hrwiki              MediaWiki:Gadget-patrollinks.js
hrwikiquote         MediaWiki:Gadget-HotCat.js
hrwikisource        MediaWiki:Gadget-HotCat.js
hrwiktionary        MediaWiki:Gadget-HotCat.js
huwiki              MediaWiki:Gadget-api.js
huwiki              MediaWiki:Gadget-autocomplete.js
huwiki              MediaWiki:Gadget-catinsert.js
huwiki              MediaWiki:Gadget-sablonmester.js
huwikinews          MediaWiki:Gadget-autocomplete.js
huwikinews          MediaWiki:Gadget-catinsert.js
huwikisource        MediaWiki:Gadget-hotcat.js
huwiktionary        MediaWiki:Gadget-catinsert.js
huwiktionary        MediaWiki:Gadget-hotcat.js
idwiktionary        MediaWiki:Common.js
idwiktionary        MediaWiki:Gadget-HotCat.js
incubatorwiki       MediaWiki:Gadget-massdelete.js
itwiktionary        MediaWiki:Gadget-AjaxMassRB.js
itwiktionary        MediaWiki:Gadget-dropdown-menus.js
jvwiki              MediaWiki:Common.js
kawiki              MediaWiki:Common.js
kawiki              MediaWiki:Gadget-dropdown-menus.js
kawiki              MediaWiki:Gadget-preview.js
kbdwiki             MediaWiki:Gadget-HotCat.js
kkwiki              MediaWiki:Gadget-QPreview.js
lezwiki             MediaWiki:Gadget-HotCat.js
ltwiki              MediaWiki:Gadget-markblocked.js
ltwiktionary        MediaWiki:Gadget-HotCat.js
lvwiki              MediaWiki:RefToolbarLegacy.js
maiwiki             MediaWiki:Gadget-dropdown-menus.js
maiwiki             MediaWiki:Gadget-metadata.js
map_bmswiki         MediaWiki:Common.js
map_bmswiki         MediaWiki:Gadget-HotCat.js
mediawikiwiki       MediaWiki:Gadget-ajaxrecentchanges.js
metawiki            MediaWiki:Gadget-markblocked.js
mgwiktionary        MediaWiki:Common.js
mgwiktionary        MediaWiki:Gadget-HotCat.js
minwiki             MediaWiki:Common.js
mkwiki              MediaWiki:Gadget-HotCat.js
mkwiki              MediaWiki:Gadget-dropdown-menus.js
mkwiki              MediaWiki:Gadget-metadata.js
mkwiki              MediaWiki:Gadget-modrollback.js
mkwiki              MediaWiki:RefToolbarLegacy.js
mkwikisource        MediaWiki:Gadget-HotCat.js
mkwikisource        MediaWiki:Gadget-dropdown-menus.js
mkwikisource        MediaWiki:Gadget-metadata.js
mkwikisource        MediaWiki:Gadget-modrollback.js
mrjwiki             MediaWiki:Gadget-HotCat.js
mtwiktionary        MediaWiki:Common.js
mznwiki             MediaWiki:Gadget-HotCat.js
mznwiki             MediaWiki:Gadget-userinfo.js
ndswiktionary       MediaWiki:Common.js
newiki              MediaWiki:Gadget-dropdown-menus.js
newiki              MediaWiki:Gadget-metadata.js
nnwiktionary        MediaWiki:Common.js
nowiki              MediaWiki:Gadget-InterwikiOrder.js
nowiki              MediaWiki:Gadget-show-patrol-log.js
nvwiki              MediaWiki:Gadget-HotCat.js
orwiki              MediaWiki:Gadget-dropdown-menus.js
orwiki              MediaWiki:Gadget-metadata.js
orwiki              MediaWiki:RefToolbarLegacy.js
orwiktionary        MediaWiki:Common.js
plwikinews          MediaWiki:Common.js
pswiki              MediaWiki:Gadget-afchelper.js
pswiki              MediaWiki:Gadget-dropdown-menus.js
pswiki              MediaWiki:Gadget-metadata.js
pswiktionary        MediaWiki:Gadget-userinfo.js
ptwiki              MediaWiki:Ticker.js
ptwikinews          MediaWiki:Ticker.js
ptwiktionary        MediaWiki:Common.js
rowikinews          MediaWiki:Ticker.js
ruwiki              MediaWiki:Gadget-HotCat.js
ruwiki              MediaWiki:Gadget-dropdown-menus.js
ruwiki              MediaWiki:Gadget-qualityArticles.js
ruwiki              MediaWiki:Voting.js
ruwiki              MediaWiki:Voting10.js
ruwiki              MediaWiki:Voting11.js
ruwiki              MediaWiki:Voting12.js
ruwiki              MediaWiki:Voting7.js
ruwiki              MediaWiki:Voting8.js
ruwiki              MediaWiki:Voting9.js
ruwikibooks         MediaWiki:Gadget-preview.js
ruwikimedia         MediaWiki:AjaxTranslation.js
ruwikimedia         MediaWiki:Gadget-HotCat.js
ruwikinews          MediaWiki:Gadget-preview.js
ruwikinews          MediaWiki:Mwapilib.js
ruwikinews          MediaWiki:Ticker.js
ruwikiquote         MediaWiki:Gadget-dropdown-menus.js
ruwikiquote         MediaWiki:Gadget-preview.js
ruwikisource        MediaWiki:Dictionary.js
ruwikisource        MediaWiki:Gadget-HotCat.js
ruwikisource        MediaWiki:Gadget-preview.js
ruwiktionary        MediaWiki:Gadget-HotCat.js
ruwiktionary        MediaWiki:Gadget-dropdown-menus.js
sawikisource        MediaWiki:Gadget-TemplatePreloader.js
shwiktionary        MediaWiki:Common.js
shwiktionary        MediaWiki:Gadget-patrollinks.js
simplewiki          MediaWiki:Gadget-Bracketmatch.js
simplewiki          MediaWiki:Gadget-EnhancedInterwikis.js
simplewikibooks     MediaWiki:Gadget-HotCat.js
siwiki              MediaWiki:Gadget-dropdown-menus.js
siwiki              MediaWiki:UploadForm.js
siwikibooks         MediaWiki:Gadget-HotCat.js
slwiki              MediaWiki:Gadget-modrollback.js
slwikibooks         MediaWiki:Gadget-HotCat.js
slwikisource        MediaWiki:Gadget-HotCat.js
sourceswiki         MediaWiki:Dictionary.js
sourceswiki         MediaWiki:Gadget-HotCat.js
sqwikinews          MediaWiki:Gadget-CommentWatch.js
sqwikinews          MediaWiki:Ticker.js
srwikibooks         MediaWiki:Common.js/Edit tools.js
srwikibooks         MediaWiki:Common.js/mwbot.js
srwikinews          MediaWiki:Gadget-CommentWatch.js
srwikinews          MediaWiki:Gadget-readyAlert.js
srwikinews          MediaWiki:Ticker.js
strategywiki        MediaWiki:Gadget-hotcat.js
svwikibooks         MediaWiki:Gadget-HotCat.js
svwikiquote         MediaWiki:Gadget-hotcat.js
svwikiversity       MediaWiki:Common.js
svwikiversity       MediaWiki:Gadget-hotcat.js
test2wiki           MediaWiki:Gadget-Flickrfixr.js
test2wiki           MediaWiki:Gadget-dropdown-menus.js
test2wiki           MediaWiki:Gadget-metadata.js
testwiki            MediaWiki:Gadget-closeAFD.js
testwiki            MediaWiki:Gadget-dropdown-menus.js
testwiki            MediaWiki:Gadget-massblock.js
testwiki            MediaWiki:RefToolbarLegacy.js
testwiki            MediaWiki:Ticker.js
testwiki            MediaWiki:Wikibugs.js
tewiki              MediaWiki:RefToolbarLegacy.js
tewikisource        MediaWiki:Gadget-TemplatePreloader.js
trwiki              MediaWiki:RefToolbarLegacy.js
trwikinews          MediaWiki:Gadget-HotCat.js
trwikinews          MediaWiki:Gadget-Pratik menu.js
ttwiki              MediaWiki:Gadget-HotCat.js
ttwikibooks         MediaWiki:Gadget-preview.js
ttwikibooks         MediaWiki:Upload.js
ukwiki              MediaWiki:Voting2.js
ukwiki              MediaWiki:Voting3.js
ukwiki              MediaWiki:Voting4.js
ukwiki              MediaWiki:Voting4bis.js
ukwiki              MediaWiki:Voting6.js
ukwikisource        MediaWiki:Gadget-TemplatePreloader.js
urwiki              MediaWiki:Gadget-BandeauxPortails.js
urwiki              MediaWiki:Gadget-LiveRC.js/Extensions/HotCatsMulti.js
urwiki              MediaWiki:Gadget-catinsert.js
urwiki              MediaWiki:Gadget-dropdown-menus-nonvector.js
urwiki              MediaWiki:Gadget-metadata.js
urwiki              MediaWiki:Gadget-saveandedit.js
urwiki              MediaWiki:Gadget-userinfo.js
urwiki              MediaWiki:RefToolbarLegacy.js
viwiki              MediaWiki:RefToolbarLegacy.js
viwikibooks         MediaWiki:Gadget-dropdown-menus.js
viwikisource        MediaWiki:Gadget-TemplatePreloader.js
wikidatawiki        MediaWiki:Gadget-dropdown-menus.js
wikimania2010wiki   MediaWiki:Gadget-HotCat.js
yiwiki              MediaWiki:Gadget-HotCat.js
zh_min_nanwiki      MediaWiki:Gadget-HotCat.js
zh_yuewiki          MediaWiki:Gadget-dropdown-menus.js
zh_yuewiki          MediaWiki:Gadget-modrollback.js
zhwiki              MediaWiki:Gadget-markblocked.js
zhwiki              MediaWiki:Gadget-metadata.js
zhwiki              MediaWiki:Gadget-quickpreview.js
zhwikibooks         MediaWiki:Gadget-HotCat.js
zhwikinews          MediaWiki:Comments.js
(total: 279, shown: 279)
reedy@terbium:~$

Really need to sort that lot out... There's 277 now

HotCat on Commons has not been using sajax since 2012: https://commons.wikimedia.org/wiki/?diff=66523265.
I guess most local versions can simply be replaced with a mw.loader.load() to the canonical one.

HotCat on Commons has not been using sajax since 2012: https://commons.wikimedia.org/wiki/?diff=66523265.
I guess most local versions can simply be replaced with a mw.loader.load() to the canonical one.

I suspect a lot of them just want a newer version copying over them OR changing to load the version from commons/similar

Pinging some random Global Interface Editors

The software development model whereby it falls on MediaWiki core developers to chase down and fix users of deprecated APIs is fundamentally broken. Part of our responsibility as developers is to keep the MediaWiki platform attractive to new users and comprehensible to new developers, and we are going to fail to meet this responsibility if we continue to put a higher priority on backward-compatibility for user-maintained scripts than the flexibility, simplicity, and modernity of our platform.

The only requirements for removing Sajax are an e-mail notice to wikitech-l and/or wikitech-ambassadors.

Change 228798 had a related patch set uploaded (by Jack Phoenix):
Use jQuery instead of sajax

https://gerrit.wikimedia.org/r/228798

In T55120#1502018, @ori wrote:

The software development model whereby it falls on MediaWiki core developers to chase down and fix users of deprecated APIs is fundamentally broken.

Yep, I agree with this.

Part of our responsibility as developers is to keep the MediaWiki platform attractive to new users and comprehensible to new developers, and we are going to fail to meet this responsibility if we continue to put a higher priority on backward-compatibility for user-maintained scripts than the flexibility, simplicity, and modernity of our platform.

Also mostly agree with this.

The only requirements for removing Sajax are an e-mail notice to wikitech-l and/or wikitech-ambassadors.

This, however, would probably result in a huge community backlash when people's scripts stopped working. Most users don't care whether a script uses a deprecated API - they just care whether it works or not. At the least, there needs to be a message to community noticeboards on all affected WMF wikis and a lengthy period of time (3 months?) to allow people to migrate their scripts.

For scripts like HotCat that no longer use the deprecated code, it should be easy enough to update copies on other wikis so that they will work after Sajax is disabled. But many scripts will need new code, and switching from Sajax to $.ajax or mw.Api is not necessarily easy.

I'd be interested to see how many uses of Sajax there are when you include the User namespace on all WMF wikis, instead of just the Mediawiki namespace as was done on the searches above. On enwiki at least, the numbers are alarming: there are 458 hits for a search of "sajax" in the User namespace, compared to 2 in the Mediawiki namespace.

In T55120#1502018, @ori wrote:

The software development model whereby it falls on MediaWiki core developers to chase down and fix users of deprecated APIs is fundamentally broken. Part of our responsibility as developers is to keep the MediaWiki platform attractive to new users and comprehensible to new developers, and we are going to fail to meet this responsibility if we continue to put a higher priority on backward-compatibility for user-maintained scripts than the flexibility, simplicity, and modernity of our platform.

Part of our responsibility as software engineers supporting the Wikimedia community is to not pull out the rug from under them without a good reason. The interest we're paying on the Sajax technical debt is trivial compared to some other problems. I'm comparably new here, and joining the developer community a few years ago, I didn't even know that something like Sajax exists; it did not impede me in any way.

We should live up to the standard you want to enforce ourselves first. MediaWiki is still compatible with PHP 5.3 rather than 5.5 only because the Wikimedia Foundation still runs 5.3. The Sajax removal was, for the longest time (over two years!), blocked on its usage in SecurePoll, which is used (AFAIK) exclusively by the WMF and which nevertheless receives almost no maintenance from us.

I'm not saying we should fix any odd script on the hundreds of wikis every time we make a backwards-incompatible change, but I am saying we should support those that will have to do it, and make some effort to fix the simple cases. (In this case, I have a hunch that globally replacing sajax_init_object() with new XMLHttpRequest() will fix 85% of these scripts, another 10% are probably relying on other APIs we've already removed and are thus already broken, and only the last 5% will need any real thought to evaluate.)

The only requirements for removing Sajax are an e-mail notice to wikitech-l and/or wikitech-ambassadors.

I think it would be good to at least include it in Tech News. Would be nice to include the lists of scripts which may be affected with the announcement, too.

Legoktm assigned this task to ori.

FYI, Mr. Stradivarius posted a list of affected scripts on en.wp.

I posted a list of all scripts affected on WMF wikis ;)

reedy@tin:~$ mwgrep sajax --max-results 300
## Public wiki results
acewiki             MediaWiki:Common.js
arwiki              MediaWiki:Gadget-BandeauxPortails.js
arwiki              MediaWiki:Gadget-InterwikiOrder.js
arwiki              MediaWiki:Gadget-saveandedit.js
arwiki              MediaWiki:Gadget-userinfo.js
arwikinews          MediaWiki:Gadget-HotCat.js
arwikinews          MediaWiki:Gadget-HotCat.js
aswiki              MediaWiki:Gadget-dropdown-menus.js
aswiki              MediaWiki:Notifier.js
aswiki              MediaWiki:RefToolbarLegacy.js
aswikisource        MediaWiki:Gadget-TemplatePreloader.js
azwiki              MediaWiki:Gadget-HotCat.js
azwikiquote         MediaWiki:Gadget-HotCat.js
azwikisource        MediaWiki:Gadget-HotCat.js
bawiki              MediaWiki:Common.js/documentation tab.js
bdwikimedia         MediaWiki:Gadget-HotCat.js
be_x_oldwiki        MediaWiki:RefToolbarLegacy.js
bgwiki              MediaWiki:Common.js/edit.js
bgwikiquote         MediaWiki:Common.js
bgwikiquote         MediaWiki:Common.js/Tm.js
bgwiktionary        MediaWiki:Common.js
bhwiki              MediaWiki:Gadget-dropdown-menus.js
bjnwiki             MediaWiki:Common.js
bjnwiki             MediaWiki:Gadget-HotCat.js
bnwiki              MediaWiki:Notifier.js
bnwiki              MediaWiki:RefToolbarLegacy.js
bnwikisource        MediaWiki:Gadget-TemplatePreloader.js
bswiki              MediaWiki:Gadget-checkVoteRights.js
bswiki              MediaWiki:Gadget-patrollinks.js
bugwiki             MediaWiki:Gadget-HotCat.js
bxrwiki             MediaWiki:Gadget-HotCat.js
cawiki              MediaWiki:Common.js/documentation tab.js
cawiki              MediaWiki:RefToolbarLegacy.js
cawikiquote         MediaWiki:Common.js/documentation tab.js
cawikiquote         MediaWiki:RefToolbarLegacy.js
cawiktionary        MediaWiki:Common.js/documentation tab.js
cewiki              MediaWiki:Gadget-HotCat.js
cewiki              MediaWiki:Gadget-dropdown-menus.js
commonswiki         MediaWiki:Gadget-Flickrfixr.js
commonswiki         MediaWiki:Notifier.js
commonswiki         MediaWiki:UploadFormTest.js
dewiki              MediaWiki:Gadget-PrettyLog.js
dewikiversity       MediaWiki:Gadget-PageWatcher.js
elwikinews          MediaWiki:Comments.js
elwikinews          MediaWiki:Gadget-CommentWatch.js
elwikisource        MediaWiki:Gadget-TemplatePreloader.js
enwiki              MediaWiki:Gadget-dropdown-menus-nonvector.js
enwiki              MediaWiki:RefToolbarLegacy.js
enwikibooks         MediaWiki:Gadget-markblocked.js
enwikinews          MediaWiki:Gadget-CommentWatch.js
enwikinews          MediaWiki:Gadget-bracketmatch.js
enwikinews          MediaWiki:Gadget-readyAlert.js
enwikiquote         MediaWiki:Gadget-EnhancedInterwikis.js
enwikiquote         MediaWiki:Gadget-EnhancedInterwikis.js
enwikisource        MediaWiki:Dictionary.js
enwikisource        MediaWiki:Gadget-TemplatePreloader.js
enwikisource        MediaWiki:Gadget-massdelete.js
eowiki              MediaWiki:Common.js/documentation tab.js
eowikisource        MediaWiki:Gadget-TemplatePreloader.js
eswikinews          MediaWiki:Gadget-AlertaRev.js
eswikinews          MediaWiki:Gadget-VigilaComentario.js
fawiki              MediaWiki:Gadget-InterwikiOrder.js
fawiki              MediaWiki:Gadget-LiveRC.js/Extensions/HotCatsMulti.js
fawiki              MediaWiki:Gadget-Suggest.js
fawiki              MediaWiki:Gadget-dropdown-menus.js
fawiki              MediaWiki:Gadget-metadata.js
fawiki              MediaWiki:Gadget-userinfo.js
fawiki              MediaWiki:RefToolbarLegacy.js
fawiki              MediaWiki:UploadForm.js
fawikibooks         MediaWiki:Gadget-HotCat.js
fawikinews          MediaWiki:Comments.js
fawikinews          MediaWiki:Gadget-CommentWatch.js
fawikinews          MediaWiki:Gadget-HotCat.js
fawikinews          MediaWiki:Mwapilib.js
fawikiquote         MediaWiki:Gadget-dropdown-menus.js
fawikisource        MediaWiki:Gadget-HotCat.js
fawikivoyage        MediaWiki:Gadget-userinfo.js
fawikivoyage        MediaWiki:Ticker.js
fawiktionary        MediaWiki:Gadget-HotCat.js
fawiktionary        MediaWiki:Gadget-userinfo.js
fawiktionary        MediaWiki:RefToolbarLegacy.js
fiwiki              MediaWiki:Gadget-util.js
fiwikibooks         MediaWiki:Gadget-AJAX-esikatselu.js
fiwikinews          MediaWiki:Common.js
frwiki              MediaWiki:Gadget-DeveloppementJavaScript.js
frwiki              MediaWiki:Gadget-PagesSansBandeauDePortail.js
frwikibooks         MediaWiki:Gadget-HotCats.js
frwikinews          MediaWiki:Gadget-BandeauxPages.js
frwikinews          MediaWiki:Gadget-HotCatsMulti.js
frwikisource        MediaWiki:Gadget-BandeauxPortails.js
frwikisource        MediaWiki:Gadget-ChangeCategorie.js
frwikisource        MediaWiki:Gadget-HotCatsMulti.js
frwikisource        MediaWiki:Gadget-QualityRibbon.js
gagwiki             MediaWiki:Gadget-HotCat.js
hewiki              MediaWiki:AlertFreeUseImage.js
hewiki              MediaWiki:AlertProtected.js
hewiki              MediaWiki:Gadget-TrollOptions.js
hewikibooks         MediaWiki:AlertProtected.js
hewikibooks         MediaWiki:Gadget-InterwikiOrder.js
hewikibooks         MediaWiki:Gadget-QPreview.js
hewikibooks         MediaWiki:Gadget-TrollOptions.js
hewikinews          MediaWiki:AlertProtected.js
hewikiquote         MediaWiki:Gadget-CustomSideBarLinks.js
hewikiquote         MediaWiki:Gadget-InterwikiOrder.js
hewikiquote         MediaWiki:Gadget-QPreview.js
hewikiquote         MediaWiki:Gadget-rcPatrol.js
hewikisource        MediaWiki:Gadget-InterwikiOrder.js
hewikisource        MediaWiki:Gadget-QPreview.js
hewikivoyage        MediaWiki:AlertProtected.js
hewikivoyage        MediaWiki:Gadget-Contributions.js
hewikivoyage        MediaWiki:Gadget-HotCat.js
hewikivoyage        MediaWiki:Gadget-QPreview.js
hiwiki              MediaWiki:Gadget-dropdown-menus.js
hiwiki              MediaWiki:Gadget-metadata.js
hrwiki              MediaWiki:Gadget-patrollinks.js
hrwikiquote         MediaWiki:Gadget-HotCat.js
hrwikisource        MediaWiki:Gadget-HotCat.js
hrwiktionary        MediaWiki:Gadget-HotCat.js
huwiki              MediaWiki:Gadget-api.js
huwiki              MediaWiki:Gadget-autocomplete.js
huwiki              MediaWiki:Gadget-catinsert.js
huwiki              MediaWiki:Gadget-sablonmester.js
huwikinews          MediaWiki:Gadget-autocomplete.js
huwikinews          MediaWiki:Gadget-catinsert.js
huwikisource        MediaWiki:Gadget-hotcat.js
huwiktionary        MediaWiki:Gadget-catinsert.js
huwiktionary        MediaWiki:Gadget-hotcat.js
idwiktionary        MediaWiki:Common.js
idwiktionary        MediaWiki:Gadget-HotCat.js
incubatorwiki       MediaWiki:Gadget-massdelete.js
incubatorwiki       MediaWiki:Wp/bgn/Gadget-dropdown-menus.js
itwiktionary        MediaWiki:Gadget-AjaxMassRB.js
itwiktionary        MediaWiki:Gadget-dropdown-menus.js
jvwiki              MediaWiki:Common.js
kawiki              MediaWiki:Common.js
kawiki              MediaWiki:Gadget-dropdown-menus.js
kawiki              MediaWiki:Gadget-preview.js
kbdwiki             MediaWiki:Gadget-HotCat.js
kkwiki              MediaWiki:Gadget-QPreview.js
lezwiki             MediaWiki:Gadget-HotCat.js
ltwiki              MediaWiki:Gadget-markblocked.js
ltwiktionary        MediaWiki:Gadget-HotCat.js
lvwiki              MediaWiki:Gadget-massedit.js
lvwiki              MediaWiki:RefToolbarLegacy.js
maiwiki             MediaWiki:Gadget-dropdown-menus.js
maiwiki             MediaWiki:Gadget-metadata.js
map_bmswiki         MediaWiki:Common.js
map_bmswiki         MediaWiki:Gadget-HotCat.js
mediawikiwiki       MediaWiki:Gadget-ajaxrecentchanges.js
metawiki            MediaWiki:Gadget-markblocked.js
mgwiktionary        MediaWiki:Common.js
mgwiktionary        MediaWiki:Gadget-HotCat.js
minwiki             MediaWiki:Common.js
mkwiki              MediaWiki:Gadget-HotCat.js
mkwiki              MediaWiki:Gadget-dropdown-menus.js
mkwiki              MediaWiki:Gadget-metadata.js
mkwiki              MediaWiki:Gadget-modrollback.js
mkwiki              MediaWiki:RefToolbarLegacy.js
mkwikisource        MediaWiki:Gadget-HotCat.js
mkwikisource        MediaWiki:Gadget-dropdown-menus.js
mkwikisource        MediaWiki:Gadget-metadata.js
mkwikisource        MediaWiki:Gadget-modrollback.js
mrjwiki             MediaWiki:Gadget-HotCat.js
mtwiktionary        MediaWiki:Common.js
mznwiki             MediaWiki:Gadget-HotCat.js
mznwiki             MediaWiki:Gadget-userinfo.js
ndswiktionary       MediaWiki:Common.js
newiki              MediaWiki:Gadget-dropdown-menus.js
newiki              MediaWiki:Gadget-metadata.js
nnwiktionary        MediaWiki:Common.js
nowiki              MediaWiki:Gadget-InterwikiOrder.js
nowiki              MediaWiki:Gadget-show-patrol-log.js
nvwiki              MediaWiki:Gadget-HotCat.js
orwiki              MediaWiki:Gadget-dropdown-menus.js
orwiki              MediaWiki:Gadget-metadata.js
orwiki              MediaWiki:RefToolbarLegacy.js
plwikinews          MediaWiki:Common.js
pswiki              MediaWiki:Gadget-afchelper.js
pswiki              MediaWiki:Gadget-dropdown-menus.js
pswiki              MediaWiki:Gadget-metadata.js
pswiktionary        MediaWiki:Gadget-userinfo.js
ptwiki              MediaWiki:Ticker.js
ptwikinews          MediaWiki:Ticker.js
ptwiktionary        MediaWiki:Common.js
rowikinews          MediaWiki:Ticker.js
ruwiki              MediaWiki:Gadget-HotCat.js
ruwiki              MediaWiki:Gadget-dropdown-menus.js
ruwiki              MediaWiki:Gadget-qualityArticles.js
ruwiki              MediaWiki:Voting.js
ruwiki              MediaWiki:Voting10.js
ruwiki              MediaWiki:Voting11.js
ruwiki              MediaWiki:Voting12.js
ruwiki              MediaWiki:Voting7.js
ruwiki              MediaWiki:Voting8.js
ruwiki              MediaWiki:Voting9.js
ruwikibooks         MediaWiki:Gadget-preview.js
ruwikimedia         MediaWiki:AjaxTranslation.js
ruwikimedia         MediaWiki:Gadget-HotCat.js
ruwikinews          MediaWiki:Gadget-preview.js
ruwikinews          MediaWiki:Mwapilib.js
ruwikinews          MediaWiki:Ticker.js
ruwikiquote         MediaWiki:Gadget-dropdown-menus.js
ruwikiquote         MediaWiki:Gadget-preview.js
ruwikisource        MediaWiki:Dictionary.js
ruwikisource        MediaWiki:Gadget-HotCat.js
ruwikisource        MediaWiki:Gadget-preview.js
ruwiktionary        MediaWiki:Gadget-HotCat.js
ruwiktionary        MediaWiki:Gadget-dropdown-menus.js
sawikisource        MediaWiki:Gadget-TemplatePreloader.js
shwiktionary        MediaWiki:Common.js
shwiktionary        MediaWiki:Gadget-patrollinks.js
simplewiki          MediaWiki:Gadget-Bracketmatch.js
simplewiki          MediaWiki:Gadget-EnhancedInterwikis.js
simplewikibooks     MediaWiki:Gadget-HotCat.js
siwiki              MediaWiki:Gadget-dropdown-menus.js
siwiki              MediaWiki:UploadForm.js
siwikibooks         MediaWiki:Gadget-HotCat.js
slwiki              MediaWiki:Gadget-modrollback.js
slwikibooks         MediaWiki:Gadget-HotCat.js
slwikisource        MediaWiki:Gadget-HotCat.js
sourceswiki         MediaWiki:Dictionary.js
sourceswiki         MediaWiki:Gadget-HotCat.js
sqwikinews          MediaWiki:Gadget-CommentWatch.js
sqwikinews          MediaWiki:Ticker.js
srwikibooks         MediaWiki:Common.js/Edit tools.js
srwikibooks         MediaWiki:Common.js/mwbot.js
srwikinews          MediaWiki:Gadget-CommentWatch.js
srwikinews          MediaWiki:Gadget-readyAlert.js
srwikinews          MediaWiki:Ticker.js
strategywiki        MediaWiki:Gadget-hotcat.js
svwikibooks         MediaWiki:Gadget-HotCat.js
svwikiquote         MediaWiki:Gadget-hotcat.js
svwikiversity       MediaWiki:Common.js
svwikiversity       MediaWiki:Gadget-hotcat.js
test2wiki           MediaWiki:Gadget-Flickrfixr.js
test2wiki           MediaWiki:Gadget-dropdown-menus.js
test2wiki           MediaWiki:Gadget-metadata.js
testwiki            MediaWiki:Gadget-closeAFD.js
testwiki            MediaWiki:Gadget-dropdown-menus.js
testwiki            MediaWiki:Gadget-massblock.js
testwiki            MediaWiki:RefToolbarLegacy.js
tewiki              MediaWiki:RefToolbarLegacy.js
tewikisource        MediaWiki:Gadget-TemplatePreloader.js
trwiki              MediaWiki:RefToolbarLegacy.js
trwikinews          MediaWiki:Gadget-HotCat.js
trwikinews          MediaWiki:Gadget-Pratik menu.js
ttwiki              MediaWiki:Gadget-HotCat.js
ttwikibooks         MediaWiki:Gadget-preview.js
ttwikibooks         MediaWiki:Upload.js
ukwiki              MediaWiki:Voting2.js
ukwiki              MediaWiki:Voting3.js
ukwiki              MediaWiki:Voting4.js
ukwiki              MediaWiki:Voting4bis.js
ukwiki              MediaWiki:Voting6.js
ukwikisource        MediaWiki:Gadget-TemplatePreloader.js
urwiki              MediaWiki:Gadget-BandeauxPortails.js
urwiki              MediaWiki:Gadget-LiveRC.js/Extensions/HotCatsMulti.js
urwiki              MediaWiki:Gadget-catinsert.js
urwiki              MediaWiki:Gadget-dropdown-menus-nonvector.js
urwiki              MediaWiki:Gadget-metadata.js
urwiki              MediaWiki:Gadget-saveandedit.js
urwiki              MediaWiki:Gadget-userinfo.js
urwiki              MediaWiki:RefToolbarLegacy.js
viwiki              MediaWiki:RefToolbarLegacy.js
viwikibooks         MediaWiki:Gadget-dropdown-menus.js
viwikisource        MediaWiki:Gadget-TemplatePreloader.js
wikidatawiki        MediaWiki:Gadget-dropdown-menus.js
wikimania2010wiki   MediaWiki:Gadget-HotCat.js
yiwiki              MediaWiki:Gadget-HotCat.js
zh_min_nanwiki      MediaWiki:Gadget-HotCat.js
zh_yuewiki          MediaWiki:Gadget-dropdown-menus.js
zh_yuewiki          MediaWiki:Gadget-modrollback.js
zhwiki              MediaWiki:Gadget-markblocked.js
zhwiki              MediaWiki:Gadget-metadata.js
zhwiki              MediaWiki:Gadget-quickpreview.js
zhwikibooks         MediaWiki:Gadget-HotCat.js
zhwikinews          MediaWiki:Comments.js

(total: 277, shown: 277)
reedy@tin:~$

I posted a list of all scripts affected on WMF wikis ;)

Whoops. All Praise to the Reedy! ;)

I'd be interested to see how many uses of Sajax there are when you include the User namespace on all WMF wikis, instead of just the Mediawiki namespace as was done on the searches above. On enwiki at least, the numbers are alarming: there are 458 hits for a search of "sajax" in the User namespace, compared to 2 in the Mediawiki namespace.

@Reedy or @Krenair: can you please run mwgrep sajax --user and report the number of results across all public Wikimedia wikis?

In T55120#1502018, @ori wrote:

The software development model whereby it falls on MediaWiki core developers to chase down and fix users of deprecated APIs is fundamentally broken. Part of our responsibility as developers is to keep the MediaWiki platform attractive to new users and comprehensible to new developers, and we are going to fail to meet this responsibility if we continue to put a higher priority on backward-compatibility for user-maintained scripts than the flexibility, simplicity, and modernity of our platform.

You're setting up another false dichotomy here. Nobody is suggesting that it's MediaWiki core developers' responsibility to fix every user script. What several people (including @MrStradivarius and @matmarex) are trying to explain to you is that it's unacceptable to make breaking changes without sufficient warning unless there are exigent circumstances (unavoidable security or performance implications).

In both the cases of document.write() and sajax, for how long have we been telling users directly (in the browser console, on their talk pages, via e-mail) that these interfaces are no longer supported? @MrStradivarius suggested a three-month warning period. I'd go a bit further and suggest six months. What's the rush? If we really need a formal policy that spells this out, I'm sure we can create one on mediawiki.org.

The only requirements for removing Sajax are an e-mail notice to wikitech-l and/or wikitech-ambassadors.

No. This is wrong. I'll repeat: it's unacceptable to make breaking changes without sufficient warning unless there are exigent circumstances (unavoidable security or performance implications). Nobody is saying that we can't ever modernize the codebase; people are saying that if you want to do that, you first need to make sure that users have an opportunity to correct their current code before you come along and break it. This is basic courtesy.

Agreed. Processes affected include, [[:en:Wikipedia:Featured picture candidates]] and - it would appear - a good section of [[:en:WP:TWINKLE]]. These are perfectly fixable, but '''there is literally no reason whatsoever on the developer's part to break them without any warning whatsoever.

You have a responsibility here to your users. Warnings *are* required.

AdamCuerden updated the task description. (Show Details)

Unless the removal is reverted, I don't see the point in keeping this task (to remove sajax) as "Open, Stalled".

I posted a list of all scripts affected on WMF wikis ;)

@Reedy: Those are only the scripts in the Mediawiki namespace - there are a lot more in the User namespace, especially on enwiki. My list is actually for all WMF wikis (but cobbled together from API search queries, rather than using mwgrep), and in both User and Mediawiki namespaces. It gets 739 results. If you (or anyone else) could confirm that number with mwgrep, that would be great. :)

Processes affected include ... a good section of [[:en:WP:TWINKLE]].

Actually, Twinkle isn't affected - it's people's old copies of Twinkle that are affected. People using the gadget directly will be fine.

In both the cases of document.write() and sajax, for how long have we been telling users directly (in the browser console, on their talk pages, via e-mail) that these interfaces are no longer supported?

... there is literally no reason whatsoever on the developer's part to break them without any warning whatsoever.

You have a responsibility here to your users. Warnings *are* required.

I think the problem is that while these functions have been deprecated for years, and while there have been warnings in the JavaScript console and on the mailing lists for years, the message hasn't been getting through to our end users at all. Most users don't read the mailing lists, and most probably don't even know that their browser has a JavaScript console. Even people who write user scripts will often ignore warnings in the console, either because they never check them after writing the script, because they may not know how to fix the problems, or because they retire from their respective wikis.

However, these scripts are often still in use for workflows that are important to the various communities (the scripts for enwiki's Featured picture candidates that Adam Cuerden mention are a good example). This means that someone in the community will need to fix scripts that they didn't write, otherwise their community's processes will break. And that takes time. If everyone who wrote a script using Sajax was around and able to update it, then a week might be enough. But unfortunately, we don't have that luxury.

I posted a list of all scripts affected on WMF wikis ;)

@Reedy: Those are only the scripts in the Mediawiki namespace - there are a lot more in the User namespace, especially on enwiki. My list is actually for all WMF wikis (but cobbled together from API search queries, rather than using mwgrep), and in both User and Mediawiki namespaces. It gets 739 results. If you (or anyone else) could confirm that number with mwgrep, that would be great. :)

Looks like your figure is out by quite an amount. 1367 for user pages. List incoming

## Public wiki results
alswiki             User:DerHexer/monobook.js
alswiki             User:DerHexer/vector.js
alswiki             User:Strommops/monobook.js
alswiki             User:Terfili-bötli/vector.js
arwiki              User:ASammour/user.js
arwiki              User:Aiman titi/qpreview.js
arwiki              User:Ciphers/HotCat-dev.js
arwiki              User:Ciphers/HotCat.js
arwiki              User:Elph/InterwikiOrder.js
arwiki              User:Ibrahim.ID/test.js
arwiki              User:Lupo/c.js
arwiki              User:Rami.Awad/gadget-bandsportals.js
arwiki              User:موسى المكناسي/saveandedit.js
arwiki              User:موسى المكناسي/userinfo.js
arwikiquote         User:Ciphers/Gadget-HotCat.js
arwiktionary        User:Badr alkabir/edittools.js
aywiki              User:Diego Grez-Cañete/Hotcat.js
azwiki              User:Koc61/HotCat.js
azwiki              User:Zscout370/batchdelete.js
bewiki              User:Rave/Gadget-HotCat.js
bgwikinews          User:Bawolff/opinion.js
bjnwiki             User:Ezagren/vector.js
bnwiki              User:Ctg4Rahat/common.js
bnwiki              User:Priyanka Nag/RefToolbarLegacy.js
bowiki              User:Viskonsas/Gadget-HotCat.js
cawiki              User:Anskar/scripts/vriullop.js
cawiki              User:Coet/scripts/vriullop.js
cawiki              User:Coet/tw:statuschanger.js
cawiki              User:Joancreus/milloraVista.js
cawiktionary        User:Vriullop/proves.js
cebwiki             User:Abastillas/monobook.js
cewiki              User:Sasan700/undocomment.js
commonswiki         User:AVRS/ajaxPreview.js
commonswiki         User:AVRS/diffs.js
commonswiki         User:Animum/easyblock.js
commonswiki         User:Animum/moveRV-severe.js
commonswiki         User:Animum/revdelete.js
commonswiki         User:Animum/speedytag.js
commonswiki         User:Arbitrarily0/cat-a-lot.js
commonswiki         User:Arbitrarily0/custom-hotcat.js
commonswiki         User:Avicennasis/HotCatMod.js
commonswiki         User:Brian/monobook.js
commonswiki         User:Bryan/EditPage.js
commonswiki         User:Bryan/Scripts/ExtendedWatchlist/userwatch.js
commonswiki         User:Bryan/Scripts/ExtendedWatchlist/watchlist.js
commonswiki         User:Bryan/Scripts/Poty anon.js
commonswiki         User:Bryan/Scripts/upload.js
commonswiki         User:Butko/monobook.js
commonswiki         User:Captainofhope/qui.js
commonswiki         User:Cobija/userinfo.js
commonswiki         User:Croquant/monobook.js
commonswiki         User:Croquant/vector.js
commonswiki         User:CuteHappyBrute/monobook.js
commonswiki         User:DerHexer/monobook.js
commonswiki         User:DerHexer/numberofcategories.js
commonswiki         User:DerHexer/vector.js
commonswiki         User:DieBuche/details.js
commonswiki         User:Docu/t.js
commonswiki         User:Dr Brains/NewPagePatrol.js
commonswiki         User:Emil76~commonswiki/monobook.js
commonswiki         User:Erik Baas/HotCat.js
commonswiki         User:Eug/ajaxPreview.js
commonswiki         User:Ex13/monobook.js
commonswiki         User:Exagren/vector.js
commonswiki         User:Ezagren/vector.js
commonswiki         User:Fetchcomms/delete.js
commonswiki         User:Fetchcomms/speedy.js
commonswiki         User:Flibbertigibbet/monobook.js
commonswiki         User:Foxj/omnitag.js
commonswiki         User:Juliancolton/easyblock.js
commonswiki         User:Kalan/poty.js
commonswiki         User:Kanonkas/ajaxbatchmove.js
commonswiki         User:Kanonkas/ajaxbatchundelete.js
commonswiki         User:Kanonkas/ajaxmassrollback.js
commonswiki         User:Kanonkas/ajaxpatrollinks.js
commonswiki         User:Kanonkas/batchdelete.js
commonswiki         User:Kanonkas/filemove.js
commonswiki         User:Kanonkas/moverevert2.js
commonswiki         User:Kanonkas/projectscope.js
commonswiki         User:Kanonkas/stalkcontribs.js
commonswiki         User:Kanonkas/wikibrowser.js
commonswiki         User:Lamberhurst/monobook.js
commonswiki         User:Lampak/DelReqHandler.js
commonswiki         User:Lupo/gd0.js
commonswiki         User:Lupo/gdh.js
commonswiki         User:Mailer diablo/monobook.js
commonswiki         User:Matanya/common.js
commonswiki         User:Merlissimo/monobook.js
commonswiki         User:MichaelMaggs/monobook.js
commonswiki         User:Mifter/test.js
commonswiki         User:Mr.Z-man/closeDR.js
commonswiki         User:Nixeagle/monobook.js
commonswiki         User:Otourly/NewPagePatrol.js
commonswiki         User:Patstuart/Extrascripts.js
commonswiki         User:Platonides/Notifier.js
commonswiki         User:Tgr/catinsert.js
commonswiki         User:Thehelpfulone/omnitag.js
commonswiki         User:Tim1357/Vector.js
commonswiki         User:Trixt/monobook.js
commonswiki         User:Verdy p/HotCat.js
commonswiki         User:Was a bee/test.js
cswiki              User:Mormegil/Ajaxpopup/ajaxpopup.js
dawiki              User:Dk-2100/hotcat.js
dawiki              User:Dk-2100/monobook.js
dewiki              User:Abadent/monobook.js
dewiki              User:Agruwie/monobook.js
dewiki              User:Arkanosis/iKiwi.js
dewiki              User:Arktest/monobook.js
dewiki              User:Avoided/twinklefluff.js
dewiki              User:Basilocetacea/DÜP-monobook.js
dewiki              User:BenBE1987/monobook.js/markadmins.js
dewiki              User:Bernstein 92/monobook.js
dewiki              User:C-M/twinklefluff.js
dewiki              User:Der Buckesfelder/saveandedit.js
dewiki              User:DerHexer/OPs.js
dewiki              User:DerHexer/cas.js
dewiki              User:DerHexer/countarticlesincategory.js
dewiki              User:DerHexer/deletereason.js
dewiki              User:DerHexer/fixlinks.js
dewiki              User:DerHexer/massenmail.js
dewiki              User:DerHexer/newarticles.js
dewiki              User:DerHexer/testfixlinks.js
dewiki              User:Dietzel/refman.js
dewiki              User:Dschwen/apitest.js
dewiki              User:EcceNux/wp sk.js
dewiki              User:Euku/AJAX transclusion.js
dewiki              User:EvaK/monobook.js
dewiki              User:EvaK/vector.js
dewiki              User:Faenny*/simple.js
dewiki              User:Fomafix/Gadget-HotCat.js
dewiki              User:Forrester/düp-monobook.js
dewiki              User:Ghilt/fixlinks.js
dewiki              User:Halbarath/monobook/weiterleitungen.js
dewiki              User:Herr von Quack und zu Bornhöft/twinklefluff.js
dewiki              User:Hx87/wp sk.js
dewiki              User:Ireas/düp-monobook.js
dewiki              User:Kinley/monobook.js
dewiki              User:Lindi44/vm.js
dewiki              User:Lupo/c.js
dewiki              User:Martinvdputten/monobook.js
dewiki              User:Merlissimo/export.js
dewiki              User:Merlissimo/scripts/cat.js
dewiki              User:Merlissimo/scripts/iw.js
dewiki              User:Merlissimo/scripts/manualarchive.js
dewiki              User:Merlissimo/scripts/quickrc.js
dewiki              User:Mythology1986/vector.js
dewiki              User:P.Copp/scripts/manualarchive.js
dewiki              User:P.Copp/scripts/substnow.js
dewiki              User:P.Copp/scripts/wiki.js
dewiki              User:Phixweb/düp-monobook.js
dewiki              User:Quedel/monobook-bilder.js
dewiki              User:Revolus/monobook.js/markadmins.js
dewiki              User:Revvar/VM/vorlagenmeister.js
dewiki              User:Schneeschieber/monobook.js
dewiki              User:Steavor/monobook.js
dewiki              User:SteveK/VM/vorlagenmeister.js
dewiki              User:SteveK/Vorlagenmeister.js
dewiki              User:Tafkas/twinklefluff.js
dewiki              User:Thine Antique Pen/endyk.js
dewiki              User:Tilla/fixlinks.js
dewiki              User:Tim Freitag/monobook.js
dewiki              User:Weberma/monobook.js
dewiki              User:Yellowcard/duep.js
dewiki              User:संतोष दहिवळ/vector.js
dewiki              User:✓/monobook/weiterleitungen.js
dewikinews          User:Mabdul/monobook.js
dewikiversity       User:Axmann8/monobook.js
dsbwiki             User:Tlustulimu/documentation tab.js
elwiki              User:Geraki/Edit tools.js
elwiki              User:Geraki/HotCat.js
elwiki              User:Geraki/metadata.js
enwiki              User:2D/afdvote2.js
enwiki              User:2D/road.js
enwiki              User:2D/statusupdater.js
enwiki              User:2D/tc.js
enwiki              User:55david/monobook.js
enwiki              User:AA/monobook.js
enwiki              User:Adam Cuerden/closeFPC.js
enwiki              User:Adjwilley/cactions.js
enwiki              User:Ahecht/massmove.js
enwiki              User:Airbring/vector.js
enwiki              User:Ais523/bracketmatch.js
enwiki              User:Alanl/mergeHelper.js
enwiki              User:Alanl/mergeHelper2.js
enwiki              User:Alex Smotrov/iwiki.js
enwiki              User:Alex Smotrov/qpreview.js
enwiki              User:Alexia Death/monobook.js
enwiki              User:Alpha Quadrant/cactions.js
enwiki              User:Alpha Quadrant/rollback.js
enwiki              User:Amalthea/MakeAutopatroller.js
enwiki              User:Amalthea/MakeReviewer.js
enwiki              User:Amalthea/MakeRollbacker.js
enwiki              User:Amalthea/Twirl.js
enwiki              User:Amorymeltzer/ajaxsendcomment.js
enwiki              User:Amorymeltzer/userinfo.js
enwiki              User:Andrea105/monobook.js
enwiki              User:Andrew Powers/script installer core.js
enwiki              User:AndrewN/qui-mod.js
enwiki              User:Animum/count.js
enwiki              User:Animum/moveRV-severe.js
enwiki              User:Animum/usergroups.js
enwiki              User:Animum/watchlistUpdate.js
enwiki              User:Ansumang/reference.js
enwiki              User:Apoc2400/refToolbarPlus.js
enwiki              User:Arbitrarily0/checkDYK.js
enwiki              User:Arbitrarily0/custom-hotcat.js
enwiki              User:Arbitrarily0/filemove.js
enwiki              User:Aremisasling/popupBookmarks.js
enwiki              User:Arkanosis/aTrans.js
enwiki              User:Arkanosis/iKiwi.js
enwiki              User:Arktest/monobook.js
enwiki              User:Arr4/ajaxfilemove.js
enwiki              User:Arr4/common.js
enwiki              User:Assasin Joe/status.js
enwiki              User:Atama/massblock.js
enwiki              User:Atama/massedit.js
enwiki              User:Atama/spihelper.js
enwiki              User:Atama/strikeblocked.js
enwiki              User:AutomaticStrikeout/common.js
enwiki              User:AvicPublic/HotCatMod.js
enwiki              User:Axmann8/PageWatcher.js
enwiki              User:AzaToth/testcase.js
enwiki              User:BanRay/monobook.js
enwiki              User:Basalisk/vector.js
enwiki              User:Beany/global.js
enwiki              User:Beetstra/MediaWiki:Gadget-SBHandler.js
enwiki              User:Beetstra/twinklearv.js
enwiki              User:Beetstra/twinklediff.js
enwiki              User:Beetstra/twinklefluff.js
enwiki              User:Beetstra/twinklespeedy.js
enwiki              User:Ben 28920/monobook.js
enwiki              User:Bill william compton/delsort.js
enwiki              User:Bill william compton/vector.js
enwiki              User:Billinghurst/MediaWiki:Gadget-SBHandler.js
enwiki              User:Bradv/AjaxPatrolLinks.js
enwiki              User:Bradv/Scripts/CategoryMonitor.js
enwiki              User:Bradv/Scripts/MetaPagePreview.js
enwiki              User:Bradv/sidebar.js
enwiki              User:Bradv/sprint.js
enwiki              User:Bradv/wikiBrowser.js
enwiki              User:BranStark/popupBookmarks.js
enwiki              User:Brobdingnag~enwiki/monobook.js
enwiki              User:BrownHairedGirl/Gadget-HotCat.js
enwiki              User:CBM/quickpreview.js
enwiki              User:CBM/twinklespeedy.js
enwiki              User:Caknuck/monobook.js
enwiki              User:Caknuck/vector.js
enwiki              User:Canadian Paul/monobook.js
enwiki              User:Chase me ladies, I'm the Cavalry/vector.js
enwiki              User:Ciannicay/ajaxrecentchanges.js
enwiki              User:Ciphers/HotCat-dev-ar.js
enwiki              User:Citicat/monobook.js
enwiki              User:Cobija/userinfo.js
enwiki              User:Coemgenus/monobook.js
enwiki              User:Coffee/arkansas.js
enwiki              User:Coffee/louisiana.js
enwiki              User:Colchicum/tagwpa.js
enwiki              User:Crest of London/qui.js
enwiki              User:D'Ranged 1/script/SnipManager.js
enwiki              User:Dalisays/common.css
enwiki              User:Dalisays/common.js
enwiki              User:Darkwind/easyblock-test.js
enwiki              User:David Condrey/edit-tools.js
enwiki              User:DavidHOzAu/votescript/code.js
enwiki              User:Davipo/wikipast.js
enwiki              User:Dcoetzee/Gadget-dropdown-menus.js
enwiki              User:Decltype/test.js
enwiki              User:Deerstop/monobook.js
enwiki              User:Deerstop/vector.js
enwiki              User:DeltaQuad/Scripts/Markblockedold.js
enwiki              User:DendroNaja/vector.js
enwiki              User:Digwuren/tagwpe.js
enwiki              User:Dispenser/disambig.js
enwiki              User:DoubleO711/monobook.js
enwiki              User:Dr Brains/ListPages.js
enwiki              User:Drilnoth/tabs.js
enwiki              User:Drilnoth/toolkit.js
enwiki              User:Drilnoth/toolkit/old.js
enwiki              User:Dtrebbien/vector.js
enwiki              User:Dusti/vector.css
enwiki              User:Dusti/vector.js
enwiki              User:Dycedarg/easyprod.js
enwiki              User:Dylanfromthenorth/common.js
enwiki              User:Ebe123/GA.js
enwiki              User:EdoDodo/hotcat.js
enwiki              User:Elemesh/quickpreview.js
enwiki              User:Ely1/vector.js
enwiki              User:Emil76~enwiki/monobook.js
enwiki              User:Epicgenius/stubtag.js
enwiki              User:Epsilon60198/monobook.js
enwiki              User:Equazcion/assesslinks.js
enwiki              User:Equazcion/metadata.js
enwiki              User:Equazcion/userinfo.js
enwiki              User:Eraserhead1/hangon.js
enwiki              User:EricEttensohn/vector.js
enwiki              User:Erik Jesse/monobook.js
enwiki              User:Erik9/monobook.js
enwiki              User:EuroCarGT/ajaxfilemove.js
enwiki              User:EvaK/monobook.js
enwiki              User:F.trott/monobook.js
enwiki              User:FT2/cactions.js
enwiki              User:Feezo/easyblock.js
enwiki              User:Feezo/markblocked.js
enwiki              User:Fiiiisch!/vector.js
enwiki              User:Fl/qui.js
enwiki              User:Flatscan/rescueTag.js
enwiki              User:Flying Saucer/editcount.js
enwiki              User:Fran Rogers/dimorphism.js
enwiki              User:Frenchwhale/monobook.js
enwiki              User:Frietjes/masspurge.js
enwiki              User:Fry/monobook.js
enwiki              User:GabeMc/ajaxfilemove.js
enwiki              User:Gary/mark edits after my own.js
enwiki              User:Gary/metadata.js
enwiki              User:Gary/script installer core.js
enwiki              User:Gary/script installer source.js
enwiki              User:GateKeeper/monobook.js
enwiki              User:Gene93k/delsort.js
enwiki              User:Gigs/delsort.js
enwiki              User:Gijs Kruitbosch/monobook.js
enwiki              User:Gijs Kruitbosch/twinkletest.js
enwiki              User:Gimmetrow/qprev.js
enwiki              User:Giselle/monobook.js
enwiki              User:Gnorthup/monobook.js
enwiki              User:GoRight/Wordcount.js
enwiki              User:Goodvac/reftoolbar.js
enwiki              User:Gracenotes/changesSince.js
enwiki              User:Gracenotes/twinklefluff.js
enwiki              User:GreenStork/monobook.js
enwiki              User:Gregbard/monobook.js
enwiki              User:Gregbard/twinklespeedy.js
enwiki              User:GrooveDog/vector.js
enwiki              User:Gutza/quickUnwatch dev.js
enwiki              User:Gutza/quickUnwatch.js
enwiki              User:H2ppyme/monobook.js
enwiki              User:Hallows AG/afchelper4.js
enwiki              User:Hans2520/MyWikiSpace.js
enwiki              User:Hans2520/WikiSocial.js
enwiki              User:Hans2520/vector.js
enwiki              User:Happysailor/afchelper4.js
enwiki              User:Haza-w.debug/Gadget-dropdown-menus.js
enwiki              User:Haza-w.debug/cactions.js
enwiki              User:Haza-w/cactions.js
enwiki              User:Hdt83/customrevert.js
enwiki              User:Hdt83/twfluff.js
enwiki              User:Hdt83/twmorebits.js
enwiki              User:HectorMoffet/DYKcheck.js
enwiki              User:HelloAnnyong/cumassblock.js
enwiki              User:HelloAnnyong/markblocked.js
enwiki              User:Hersfold/gwpblock.js
enwiki              User:Hghyux/quickpreview.js
enwiki              User:Highspeedrailguy/aiv.js
enwiki              User:Hpvpp/monobook.js
enwiki              User:IJReid/vector.js
enwiki              User:Iamunknown/image-templates.js
enwiki              User:Illuminatusds/monobook.js
enwiki              User:In Transit/ajaxfilemove.js
enwiki              User:Iune/monobook.js
enwiki              User:Jac16888/vector.js
enwiki              User:JackSchmidt/JS Ajax.js
enwiki              User:JamieS93/biography.js
enwiki              User:Jarry1250/ajaxsendcomment.js
enwiki              User:Javierito92/monobook.js
enwiki              User:Jeremyb/User:Lady Aleena/bracketmatch.js
enwiki              User:Jerry/delsort.js
enwiki              User:Jigesh/Gadget-HotCat.js
enwiki              User:Jimp/vector.js
enwiki              User:Joe Gazz84/afchelper4.js
enwiki              User:Joe N/monobook.js
enwiki              User:John Vandenberg/delsort.js
enwiki              User:JohnSRoberts99/monobook.js
enwiki              User:Jongleur100/monobook.js
enwiki              User:Jorgecarleitao/common.js
enwiki              User:Joshua Scott/Scripts/pageage.js
enwiki              User:Joshurtree/createwatchlist.js
enwiki              User:Js/patroller.js
enwiki              User:Js/popupBookmarks.js
enwiki              User:Jujutacular/closeFPC.js
enwiki              User:Julessp/common.js
enwiki              User:Juliancolton/capitaldistrict.js
enwiki              User:Juliancolton/tc.js
enwiki              User:Juliancolton/usernames.js
enwiki              User:Jumpytoo/monobook.js
enwiki              User:Kanonkas/moverevert.js
enwiki              User:Kanonkas/moverevert2.js
enwiki              User:Kanonkas/speedyblock.js
enwiki              User:Kanonkas/stalkcontribs.js
enwiki              User:Kapidis/monobook.js
enwiki              User:Khanson/qpreview.js
enwiki              User:Kingpin13/kill.js
enwiki              User:Koryu Obihiro/monobook.js
enwiki              User:Lady Aleena/bracketmatch.js
enwiki              User:Laughing Man/revert.js
enwiki              User:Lcmortensen/monobook.js
enwiki              User:Liangent/User:Pyrospirit/metadata.js
enwiki              User:Lightdarkness/aiv.js
enwiki              User:Little Professor/monobook.js
enwiki              User:Liz/spihelper.js
enwiki              User:Logicalthinker33/vector.js
enwiki              User:Lucky102/common.js
enwiki              User:Luk/moverevert2.js
enwiki              User:Madnessfan34537/common.js
enwiki              User:MalwareSmarts/monobook.js
enwiki              User:Manishearth/GadgetUS/generate.js
enwiki              User:MarcusBritish/metadata.js
enwiki              User:Marek69/monobook.js
enwiki              User:Marek69/vector.js
enwiki              User:Marian Dan/vector.js
enwiki              User:Martial75/Revert.js
enwiki              User:Master of Puppets/monobook.js
enwiki              User:Mdale/wikitrust.js
enwiki              User:Mdann52/PermissionOTRS.js
enwiki              User:Mercury~enwiki/AzaToth/twinklearv.js
enwiki              User:Mercury~enwiki/AzaToth/twinklediff.js
enwiki              User:Mercury~enwiki/AzaToth/twinklefluff.js
enwiki              User:Mercury~enwiki/AzaToth/twinkleprod.js
enwiki              User:Mercury~enwiki/AzaToth/twinkleprotect.js
enwiki              User:Mercury~enwiki/AzaToth/twinklespeedy.js
enwiki              User:Mercury~enwiki/AzaToth/twinklexfd.js
enwiki              User:Microchip08/PermissionOTRS.js
enwiki              User:Milkyface/twinklefluff.js
enwiki              User:Misza13/votingToolbar.js
enwiki              User:Mnmazur/monobook.js
enwiki              User:Molerat/monobook.js
enwiki              User:Mr.Z-man.sock/funcs.js
enwiki              User:Mr.Z-man/gwp.js
enwiki              User:Mr.Z-man/moverevert2.js
enwiki              User:Mr.Z-man/test.js
enwiki              User:MuffledThud/Gadget-HotCat.js
enwiki              User:MusikPuppet2/dropdowns.js
enwiki              User:Mwilso24/public/ticker.js
enwiki              User:NJA/monobook.js
enwiki              User:NahidSultan/ajaxfilemove.js
enwiki              User:Nathan2055/afc stable.js
enwiki              User:Nathan2055/afc.js/core.js
enwiki              User:Nathan2055/afc.js/submissions.js
enwiki              User:Neko-chan/QuiforUS.js
enwiki              User:Neurolysis/markblocked.js
enwiki              User:Nixeagle/twinkletest.js
enwiki              User:Northern Antarctica/common.js
enwiki              User:NuclearWarfare/gwp killer.js
enwiki              User:Nug/monobook.js
enwiki              User:Nux/wp sk.js
enwiki              User:Nx/LinkSuggest.js
enwiki              User:Oakley77/common.js
enwiki              User:Od Mishehu/markblocked.js
enwiki              User:Odie5533/SnipManager.user.js
enwiki              User:Odie5533/WAjaxInterface.user.js
enwiki              User:Odie5533/userinfo-mod.js
enwiki              User:OranL/monobook.js
enwiki              User:OrenBochman/Scripts/afc beta.js
enwiki              User:PIL1987/monobook.js
enwiki              User:Paranomia/checkblocked.js
enwiki              User:Paranomia/editcount.js
enwiki              User:Paranomia/rights.js
enwiki              User:Paranomia/samepageedit.js
enwiki              User:Paranomia/stubtagtab.js
enwiki              User:Parkerdr/popupBookmarks.js
enwiki              User:Petrb/gadget-testing-afc.js
enwiki              User:PiRSquared17/Rollback.js
enwiki              User:Piandcompany/ajaxfilemove.js
enwiki              User:Platonides/vector.js
enwiki              User:PleaseStand/recent2.js
enwiki              User:Poccil/myskin.js
enwiki              User:Porchcorpter/qui.js
enwiki              User:Prillen/monobook.js
enwiki              User:Prodego/Sandbox.js
enwiki              User:Prodego/moverevert.js
enwiki              User:Prosperosity/monobook.js
enwiki              User:Public Juju/test script.js
enwiki              User:Puffin/ajaxfilemove.js
enwiki              User:Pxma/simpleajax.js
enwiki              User:Pyrospirit/metadata-fr.js
enwiki              User:Pyrospirit/metadata.js
enwiki              User:QwerpQwertus/altmessages.js
enwiki              User:QwerpQwertus/contenteditable.js
enwiki              User:QwerpQwertus/js.js
enwiki              User:Rahk EX/instaedit.js
enwiki              User:Ramu50/monobook.js
enwiki              User:RandomStringOfCharacters/Scripts/test.js
enwiki              User:Reactivity/monobook.js
enwiki              User:Richwales/dropdown-menus.js
enwiki              User:Richwales/markusers.js
enwiki              User:Richwales/markusers2.js
enwiki              User:Riley Huntley/massblock.js
enwiki              User:Rjd0060/PermissionOTRS.js
enwiki              User:Rmhermen/monobook.js
enwiki              User:Ronhjones/OTRSpermission.js
enwiki              User:Ronhjones/OTRSreceived.js
enwiki              User:RoryHC/vector.js
enwiki              User:Roux/popupBookmarks.js
enwiki              User:Rschmertz/monobook.js
enwiki              User:Rupert'sscribe/vector.js
enwiki              User:RyanB88/twinklediff.js
enwiki              User:RyanB88/twinklefluff.js
enwiki              User:RyanB88/twinklespeedy.js
enwiki              User:Rzuwig/ajaxfilemove.js
enwiki              User:SQL/simpleajax.js
enwiki              User:ST47/twinklefluff.js
enwiki              User:Sadads/modern.js
enwiki              User:Saintrain/bracketmatch.js
enwiki              User:Saintrain/bracketmatch2.js
enwiki              User:SakyaTrizin/vector.js
enwiki              User:Salsero35/iKiwi.js
enwiki              User:Sameboat/customEdittools.js
enwiki              User:Sander Säde/allest.js
enwiki              User:Sander Säde/allest4test.js
enwiki              User:Sander Säde/assess.js
enwiki              User:Sander Säde/common.js
enwiki              User:Sander Säde/editcount.js
enwiki              User:Sander Säde/monobook.js
enwiki              User:Sander Säde/pagesCreated.js
enwiki              User:Sander Säde/quickpreview.js
enwiki              User:Sander Säde/viewsource.js
enwiki              User:SanderTest/monobook.js
enwiki              User:Schmloof/vector.js
enwiki              User:Secrecy/kill.js
enwiki              User:Seren-dipper/userinfo.js
enwiki              User:Seresin/monobook.js
enwiki              User:Simeondahl/common.js
enwiki              User:Sintaku/Scripts/userpage stats.js
enwiki              User:Skittleys/cactions.js
enwiki              User:Smser-ENG/qui.js
enwiki              User:Someonewiki/monobook.js
enwiki              User:SounderBruce/vector.js
enwiki              User:Souravmohanty2005/Gadget-HotCat.js
enwiki              User:SpK/vector.js
enwiki              User:Sparky007/monobook.js
enwiki              User:Spidern/monobook.js
enwiki              User:Splarka/ajaxbatchdelete.js
enwiki              User:Splarka/ajaxbatchmove.js
enwiki              User:Splarka/ajaxbatchundelete.js
enwiki              User:Splarka/ajaxfilemove.js
enwiki              User:Splarka/ajaxmassrollback.js
enwiki              User:Splarka/ajaxrecentchanges.js
enwiki              User:Splarka/ajaxsendcomment.js
enwiki              User:Splarka/quicktag.js
enwiki              User:Splarka/stalkcontribs.js
enwiki              User:Starship.paint/vector.js
enwiki              User:Status/ajaxfilemove.js
enwiki              User:Steel/easyblock.js
enwiki              User:Steel359/salt.js
enwiki              User:Steel359/twinkle.js
enwiki              User:Steven Zhang/qui.js
enwiki              User:Stmrlbs/bracketmatch.js
enwiki              User:Suffusion of Yellow/HotCat.js
enwiki              User:Suffusion of Yellow/evenmorebits.js
enwiki              User:Suffusion of Yellow/patrol.js
enwiki              User:Syncategoremata/watchlistnotifier.js
enwiki              User:T. Canens/afchelper4.js
enwiki              User:Tacosunday/monobook.js
enwiki              User:Tarheel95/afchelper4.js
enwiki              User:Teraom/MyWikiSpace.js
enwiki              User:That Guy, From That Show!/monobook.js
enwiki              User:That Guy, From That Show!/vector.js
enwiki              User:The Placebo Effect/monobook.js
enwiki              User:TheFearow/simpleajax.js
enwiki              User:Theopolisme/afc test.js
enwiki              User:Theopolisme/afch-ffu.js/core.js
enwiki              User:Theopolisme/afch-ffu.js/submissions.js
enwiki              User:Timotab/morebits.js
enwiki              User:Timotab/twinklearv.js
enwiki              User:Timotab/twinklediff.js
enwiki              User:Timotab/twinklefluff.js
enwiki              User:Timotab/twinkleprod.js
enwiki              User:Timotab/twinklespeedy.js
enwiki              User:Timotab/twinklewarn.js
enwiki              User:Timotheus Canens/afchelper3.js
enwiki              User:Timotheus Canens/delsort.js
enwiki              User:Timotheus Canens/massblock.js
enwiki              User:Timotheus Canens/massedit.js
enwiki              User:Timotheus Canens/massprotect.js
enwiki              User:Timotheus Canens/massrestore.js
enwiki              User:Timotheus Canens/massunblock.js
enwiki              User:Timotheus Canens/spicaselist.js
enwiki              User:Timotheus Canens/spihelper.js
enwiki              User:Timotheus Canens/test.js
enwiki              User:Tinucherian/Gadget-HotCat.js
enwiki              User:Tnxman307/monobook.js
enwiki              User:Tom Morris/delsort.js
enwiki              User:Toohool/monobook.js
enwiki              User:TrendyLegs/monobook.js
enwiki              User:Tryptophane06/Gadget-LiveRC.js/Extensions/Gadget-Suggest.js
enwiki              User:Tryptophane06/Gadget-LiveRC.js/Extensions/HotCatsMulti.js
enwiki              User:Twinzor/wikimark.js
enwiki              User:Twinzor/wikimarkbeta.js
enwiki              User:Tygrrr/monobook.js
enwiki              User:UncleDouggie/aiv-test.js
enwiki              User:UncleDouggie/aiv.js
enwiki              User:UncleDouggie/refToolbarPlus.js
enwiki              User:VasilievVV/metadata/assesslinks.js
enwiki              User:Vibhijain/common.js
enwiki              User:Vibhijain/vector.js
enwiki              User:VoA2/debug/twinklefluff.js
enwiki              User:Waggers/aaiv.js
enwiki              User:Weberma/monobook.js
enwiki              User:Widr/common.js
enwiki              User:Widr/monobook.js
enwiki              User:Wikidudeman/arv.js
enwiki              User:Wikidudeman/fluff.js
enwiki              User:Wikidudeman/morebits.js
enwiki              User:Wikidudeman/speeedy.js
enwiki              User:Wikidudeman/warn.js
enwiki              User:Willy Weazley/monobook.js
enwiki              User:Wittylama/monobook.js
enwiki              User:Writ Keeper/Scripts/easyBlock.js
enwiki              User:X!/closeRFA.js
enwiki              User:X!/nograwp.js
enwiki              User:X!/vermont.js
enwiki              User:Xaradnam/menus.js
enwiki              User:Xavier Combelle/monobook.js
enwiki              User:Xil/monobook.js
enwiki              User:YauKwanKiu/monobook.js
enwiki              User:Zeke Essiestudy/common.js
enwiki              User:Zeus/monobook.js
enwiki              User:Zeus/vector.js
enwiki              User:Zscout370/Gadget-GalleryDetails.js
enwiki              User:Zscout370/Notifier.js
enwiki              User:Zyma/common.js
enwiki              User:Æk/urldecoder.js
enwiki              User:संतोष दहिवळ/chick.js
enwikibooks         User:Arlen22/Gadget-dropdown-menus.js
enwikibooks         User:Arlen22/caction.js
enwikibooks         User:Mabdul/fiximages.js
enwikibooks         User:Mabdul/fixlinks1.js
enwikibooks         User:Wordsthink~enwikibooks/qpreview.js
enwikinews          User:Bawolff/mwapilib.js
enwikinews          User:Bawolff/sandbox/catdates.js
enwikinews          User:Bawolff/sandbox/opinion.js
enwikinews          User:Bawolff/sandbox/readyAlert.js
enwikinews          User:FellowWikiNews/monobook.js
enwikinews          User:J~enwikinews/qui.js
enwikinews          User:RedXII/qui.js
enwikinews          User:Spidern/monobook.js
enwikinews          User:TheFearow/autoping.js
enwikinews          User:TheFearow/bigtick.js
enwikisource        User:Arlen22/Gadget-dropdown-menus.js
enwikisource        User:Krenakarore/monobook.js
enwikisource        User:MohandesWiki/common.js
enwikisource        User:Mr. Absurd/hotcat.js
enwikisource        User:Phe/Author fill.js
enwikisource        User:Phe/Auto create page.js
enwikisource        User:Zyephyrus/monobook.js
enwikiversity       User:Wikiguru/monobook.js
enwiktionary        User:Cirt/Gadget-HotCat.js
enwiktionary        User:Conrad.Irwin/edittools.js
enwiktionary        User:Daniel Carrero/Gadget-HotCat.js
enwiktionary        User:Eirikr/edittools.js
enwiktionary        User:Mike Dillon/Scripts/topicCats.js
enwiktionary        User:Prillen/monobook.js
enwiktionary        User:Sack36/edittools.js
enwiktionary        User:Stephen G. Brown/edittools.js
eowiki              User:Martijnvdputten/monobook.js
eowiki              User:Seren-dipper/vector.js
eowiki              User:Siebrand/monobook.js
eowikibooks         User:Airon90/VarmaKato.js
eowiktionary        User:Dtrebbien/movuKategorion.js
eswiki              User:Arkanosis/iKiwi.js
eswiki              User:Arktest/iKiwi.js
eswiki              User:Arktest/monobook.js
eswiki              User:Axxgreazz/wikEd.js
eswiki              User:Brobdingnag/monobook.js
eswiki              User:Brobdingnag/vector.js
eswiki              User:Dreitmen/QuickPreview.js
eswiki              User:Dreitmen/Statuschanger2.js
eswiki              User:Ecelan/HotCats.js
eswiki              User:Erne Mogilevich/Statuschanger2.js
eswiki              User:Jebba/twinklearv.js
eswiki              User:Jebba/twinklediff.js
eswiki              User:Jebba/twinklefluff.js
eswiki              User:Jebba/twinkleprod.js
eswiki              User:Jebba/twinkleprotect.js
eswiki              User:Jebba/twinklespeedy.js
eswiki              User:Manuelt15/AjaxPatrolLinks.js
eswiki              User:Marvelshine/HotCats.js
eswiki              User:Sabbut/hotcats.js
eswiki              User:TwinkleUser/QuickPreview.js
eswiki              User:TwinkleUser/Statuschanger2.js
eswiki              User:ברובדינגנג/vector.js
eswikibooks         User:Ciencia Al Poder/js/LibroAleatorio.js
eswikinews          User:Bawolff/comment.js
eswikinews          User:CSTN/Ticker.js
eswikinews          User:Dreitmen/QuickPreview.js
eswikinews          User:Dreitmen/Statuschanger2.js
eswikivoyage        User:Cyrax/AjaxPatrolLinks.js
etwiki              User:C.c./editcount.js
etwiki              User:Sander Säde/editcount.js
etwiki              User:WikedKentaur/backlinks.js
etwiktionary        User:WikedKentaur/backlinks.js
fawiki              User:Behaafarin/BehaafarinTools.js
fawiki              User:Ladsgroup/LinkTranslate.js
fawiki              User:Mehran/DYKcheck.js
fawiki              User:MohandesWiki/DYKcheck.js
fawiki              User:MohandesWiki/qui.js
fawiki              User:MohandesWiki/stubtagtab.js
fawiki              User:MohandesWiki/userinfo.js
fawiki              User:Pesar amol/SnipManager.user.js
fawiki              User:Pesar amol/patroller.js
fawiki              User:Sahim/ajaxpreview.js
fawiki              User:Surena/ajaxPreview.js
fawiki              User:Surena/ajaxrecentchanges.js
fawiki              User:درفش کاویانی/skin.js
fawikibooks         User:Doostdar/common.js
fawikiquote         User:Mahan/common.js
fiwiki              User:Avanninen/SnipManager.user.js
fiwiki              User:Lucky102/common.js
fiwiki              User:Twinzor/wikimark.js
fiwiki              User:Zache/userinfo.js
fiwikiquote         User:Usp/monobook.js
foundationwiki      User:JSeddon/moverevert2.js
frwiki              User:*SM*/common.js
frwiki              User:*SM*/monobook.js
frwiki              User:0x010C/script/PopupVandalism.js
frwiki              User:Akira-otomo~frwiki/qui.js
frwiki              User:Althiphika/Gadget-BandeauxEbauches.js
frwiki              User:Althiphika/NewMessages.js
frwiki              User:Amaurybouchet/GlobalManager.js
frwiki              User:Anatole Coralien/monobook.js
frwiki              User:Arkanosis/ManWatch.js
frwiki              User:Arkanosis/aTrans.js
frwiki              User:Arkanosis/ongletSousPages.js
frwiki              User:Arkanosis/turboEdit.js
frwiki              User:Arktest/iKiwi.js
frwiki              User:Arktest/turboEdit.js
frwiki              User:Bastenbas/testExist.js
frwiki              User:Bastenbas/vector.js
frwiki              User:Benoit Rochon/qui.js
frwiki              User:Captainm/monobook.js
frwiki              User:Chphe/SuiviCat.js
frwiki              User:Cj73/GlobalManager.js
frwiki              User:Culex/monobook.js
frwiki              User:Cybots/common.js
frwiki              User:Darkoneko/commons.js
frwiki              User:Darkoneko/exemples/addStopInWatchlist.js
frwiki              User:Deep silence/monobook.js
frwiki              User:Deep silence/vector.js
frwiki              User:Delhovlyn/testExist.js
frwiki              User:Delhovlyn/verifHomon.js
frwiki              User:Dodoïste/metadata.js
frwiki              User:Dom/monobook.js
frwiki              User:Dr Brains/AbuseLogDeluxe.js
frwiki              User:Dr Brains/AdQ-BA-AutresLangues.js
frwiki              User:Dr Brains/AddCatsWhileEditing.js
frwiki              User:Dr Brains/AddInterwiki.js
frwiki              User:Dr Brains/AjoutModeleBOT.js
frwiki              User:Dr Brains/ArticlesRecentsDev.js
frwiki              User:Dr Brains/AutoTemplate.js
frwiki              User:Dr Brains/AutreProjets.js
frwiki              User:Dr Brains/AutresDiscussions.js
frwiki              User:Dr Brains/BandeauxCategoriesBOT.js
frwiki              User:Dr Brains/BandeauxEbauchesSpecialBOT.js
frwiki              User:Dr Brains/BandeauxPortailsSpecialBOT.js
frwiki              User:Dr Brains/BotFramework.js/Suggest.js
frwiki              User:Dr Brains/CategoryForceGallery.js
frwiki              User:Dr Brains/CatsWithoutInterwiki.js
frwiki              User:Dr Brains/CreatePortal.js
frwiki              User:Dr Brains/EvaluationCategorieBOT.js
frwiki              User:Dr Brains/FluxRecentchangeslinkedDeluxe.js
frwiki              User:Dr Brains/ForcePurge.js
frwiki              User:Dr Brains/GlobalManager.js/Old.js
frwiki              User:Dr Brains/HistoryAskForOversight.js
frwiki              User:Dr Brains/HistoryHideBots.js
frwiki              User:Dr Brains/IPWatch.js
frwiki              User:Dr Brains/IPWatchNoPreview.js
frwiki              User:Dr Brains/ImagesUtilisees.js
frwiki              User:Dr Brains/LinkSearchDeluxe.js
frwiki              User:Dr Brains/LinkTranslate Dev.js
frwiki              User:Dr Brains/LinkTranslate.js
frwiki              User:Dr Brains/ListAllProjects.js
frwiki              User:Dr Brains/LiveAbuseLog.js
frwiki              User:Dr Brains/LiveNewUsers.js
frwiki              User:Dr Brains/LiveRC/HotCatsMulti.js
frwiki              User:Dr Brains/LumiereSur.js
frwiki              User:Dr Brains/NewPagesDeluxe.js
frwiki              User:Dr Brains/PaSDeluxe.js
frwiki              User:Dr Brains/PageSize.js
frwiki              User:Dr Brains/PagesInCategoryBOT.js
frwiki              User:Dr Brains/PagesWithoutDefaultSort.js
frwiki              User:Dr Brains/PagesWithoutInfobox.js
frwiki              User:Dr Brains/RevertVandalBot.js
frwiki              User:Dr Brains/SiteUserInfoBiblio.js
frwiki              User:Dr Brains/SpecialPagePreview.js
frwiki              User:Dr Brains/SuiviProjet.js
frwiki              User:Dr Brains/SuiviRC.js
frwiki              User:Dr Brains/SuivisSousPages.js
frwiki              User:Dr Brains/TestExist.js
frwiki              User:Dr Brains/WatchCategoryMembers.js
frwiki              User:Dr Brains/WatchSubPages.js
frwiki              User:Dr Brains/WatchUsers.js
frwiki              User:Epop/monobook.js
frwiki              User:Epop/vector.js
frwiki              User:Fabizor/monobook.js
frwiki              User:Feldo/vector.js
frwiki              User:Fm790/monobook.js
frwiki              User:Frakir/common.js
frwiki              User:Freewol/monobook.js
frwiki              User:GK-romain/common.js
frwiki              User:Gdgourou/articles manquants.js
frwiki              User:Gdgourou/maintenance categorie.js
frwiki              User:Gdgourou/verification evaluation.js
frwiki              User:GratusBot/common.js
frwiki              User:Grind24/GlobalManager.js
frwiki              User:Grind24/hotcats.js
frwiki              User:Grind24/qui.js
frwiki              User:Gwen5484/monobook.js
frwiki              User:GwenofGwened/monobook.js
frwiki              User:Gyld/monobook.js
frwiki              User:Jammywest/monobook.js
frwiki              User:Jul.H/monobook.js
frwiki              User:Kojemiaka/copyvio.js
frwiki              User:Kyro/bandeauportail.js
frwiki              User:Linedwell/userinfo.js
frwiki              User:Mabifixem/monobook.js
frwiki              User:Mabifixem/vector.js
frwiki              User:Manecke/monobook.js
frwiki              User:Marc-André Beauchamp/common.js
frwiki              User:Martin'/vector.js
frwiki              User:MickaëlG/DesArticlesAuHasard.js
frwiki              User:MicroCitron/vector.js
frwiki              User:ModzFR/monobook.js
frwiki              User:Nemoi/Gadget-HotCatsMulti.js
frwiki              User:Nodulation/common.js
frwiki              User:Octave.H/monobook.js
frwiki              User:Od1n/HistoryDeluxe.js
frwiki              User:Orlodrim/ancresbrisees.js
frwiki              User:OwenBlacker/metadata.js
frwiki              User:Phe/Clickodrome.js
frwiki              User:Pic-Sou/common.js
frwiki              User:Pincourt/AddCatsWhileEditing.js
frwiki              User:Pincourt/GlobalManager.js
frwiki              User:Pincourt/RC.js
frwiki              User:Pramzan/vector.js
frwiki              User:QcBot/Portal1.js
frwiki              User:QcBot/monobook.js
frwiki              User:Quentin Ligier/vector.js
frwiki              User:Rami.Awad/monobook.js
frwiki              User:Reza1615/vector.js
frwiki              User:Ricky Notaro/vector.js
frwiki              User:Rome2/common.js
frwiki              User:Sacamol/HistoryDeluxe.js
frwiki              User:Salsero35/iKiwi.js
frwiki              User:Sapindnoel/Gadget-webChat.js
frwiki              User:Sebleouf/moved.js
frwiki              User:Sebleouf/pagesliees.js
frwiki              User:Sencha/monobook.js
frwiki              User:Snipre/monobook.js
frwiki              User:Superjuju10/annif.js
frwiki              User:Tadeo59370/common.js
frwiki              User:Tadeo59370/monobook.js
frwiki              User:Telperion/vector.js
frwiki              User:Terconj/common.js.js
frwiki              User:The Obento Musubi/metadata.js
frwiki              User:The Titou/monobook.js
frwiki              User:Toto Azéro/GlobalManager.js
frwiki              User:Tpa2067/monobook.js
frwiki              User:Trizek/hotcats.js
frwiki              User:Varmin/scripts/WatchCategoryMembers.js
frwiki              User:Viking59/monobook.js
frwiki              User:Voxhominis/monobook.js
frwiki              User:Xavier Combelle/monobook.js
frwiki              User:Zoldik/monobook.js
frwikinews          User:Dr Brains/BandeauxPages.js
frwikinews          User:Grimlock/public/ticker.js
frwikinews          User:TheFearow/public/ticker.js
frwikisource        User:Phe/Auteur v2.js
frwikisource        User:Phe/Auteur.js
frwikisource        User:Phe/Dictionary.js
frwikisource        User:Phe/Enhanced index.js
frwikisource        User:Rical/Auteur v2.js
frwikivoyage        User:Grind24/qui.js
frwiktionary        User:Automatik/Utilisateurs-a-bienvenuter.js
frwiktionary        User:JackPotte/refToolbarPlus.js
frwiktionary        User:Quentinv57/Utilisateurs-a-bienvenuter.js
gagwiki             User:E THP/HotCat.js
gagwiki             User:E THP/Pratik menü.js
glkwiki             User:Zscout370/ajaxdelete.js
glwiki              User:Vivaelcelta/documentacion.js
guwiki              User:Harsh4101991/RefToolbarLegacy.js
guwiki              User:Harsh4101991/userinfo.js
guwiki              User:Sam.ldite/userinfo.js
hewiki              User:Alonr/monobook.js
hewiki              User:Assafn/common.js
hewiki              User:Ely1/monobook.js/editCounterTab.js
hewiki              User:LianRad/monobook.js
hewiki              User:Mikimik/js/partolStatusInEditList.js
hewiki              User:Yonidebest/monobook.js/addAuthorOfDeletedPage.js
hewiki              User:Yonidebest/monobook.js/customnav.js
hewiki              User:Yonidebest/monobook.js/editCounterTab.js
hewiki              User:Yonidebest/monobook.js/externalWL.js
hewiki              User:Yonidebest/monobook.js/initShowImageLicenses.js
hewiki              User:Yonidebest/monobook.js/markPatrolAjax.js
hewiki              User:Yonidebest/monobook.js/markWLUsers.js
hewiki              User:Yonidebest/monobook.js/updateUserEditCounter.js
hewiki              User:Yonidebest/scripts/anonRecentEditors.js
hewiki              User:Yonidebest/scripts/loadTemplates.js
hewiki              User:אני ואתה/CustomSideBarLinksTweaked.js
hewiki              User:חזרתי/monobook.js
hewiki              User:יוסאריאן/vector.js/afterdelete warning.js
hewikiquote         User:Yonidebest/monobook.js
hewiktionary        User:Matanya/common.js/revert.js
hewiktionary        User:Yonidebest/monobook.js/customnav.js
hewiktionary        User:Yonidebest/monobook.js/randomtitle.js
hewiktionary        User:Yonidebest/monobook.js/randomtitle2.js
hiwiki              User:Mayur/DYKcheck.js
hiwiki              User:Mayur/closeAFD.js
hiwiki              User:Mayur/massedit.js
hiwiki              User:Mayur/qpreview.js
hiwiki              User:Shubhamkanodia/closeAFD.js
hiwiki              User:Shubhamkanodia/tafi.js
hiwiki              User:आशीष भटनागर/qpreview.js
hrwiki              User:AmyMirka/monobook.js
hrwiki              User:Bracodbk/monobook.js
hrwiki              User:Divna Jaksic/monobook.js
hrwiki              User:Dtom/monobook.js
hrwiki              User:Ex13/monobook.js
hrwiki              User:Frka/monobook.js
hrwiki              User:Jure Grm/monobook.js
hrwiki              User:MaGa/monobook.js
hrwiki              User:MaGaBot/common.js
hrwiki              User:Man Usk/monobook.js
hrwiki              User:SveroH/monobook.js
hsbwiki             User:Tlustulimu/documentation tab.js
huwiki              User:Buda/watchlist.js
huwiki              User:Cirkalo1/monobook.css
huwiki              User:Cirkalo1/monobook.js
huwiki              User:Evetke/monobook.js
huwiki              User:Pasztilla/watchlist.js
huwiki              User:Teemeah/qui.js
huwiki              User:Tgr/api.js
huwiki              User:Winston/whatchlist.js
huwikibooks         User:KeFe/qui.js
huwikibooks         User:Pipi69e/monobook.js
hywiki              User:GeoO/monobook.js
idwiki              User:Aris riyanto/monobook.js
idwiki              User:Baloo Official/vector.js
idwiki              User:Beeyan/monobook.css
idwiki              User:Bluesatellite/monobook.js
idwiki              User:Empu/common.js
idwiki              User:Ezagren/monobook.js
idwiki              User:Iwan Novirion/qui.js
idwiki              User:Kenrick95/qui.js
idwiki              User:Pras/vector.js
idwiki              User:Spartanica/vector.js
incubatorwiki       User:Ezagren/monobook.js
incubatorwiki       User:Hetanaheta/HotCat.js
incubatorwiki       User:John Vandenberg/userinfo.js
incubatorwiki       User:Zazamental/HotCat.js
iswiktionary        User:Spacebirdy/script-edittools.js
iswiktionary        User:Steinninn/script-edittools.js
itwiki              User:Arkanosis/iKiwi.js
itwiki              User:Beatle 93/monobook.js
itwiki              User:Dedda71/Gadget-HotCat.js
itwiki              User:Ediedi/monobook.js
itwiki              User:PersOnLine/monobook1.js
itwiki              User:PleaseStand/userinfo.js
itwiki              User:Popperipopp/monobook.js
itwiki              User:S141739/monobook.js
itwiki              User:S141739/vector.js
itwikibooks         User:LikeLifer/monobook.js
itwikibooks         User:Wim b/monobook.js
itwikinews          User:Lenore/HotCat.js
itwikinews          User:Melos/monobook.js
itwikisource        User:Casmiki/vector.js
itwikisource        User:Jalo/vector.js
itwikivoyage        User:Andyrom75/Admin.js
itwiktionary        User:.sEdivad/common.js
itwiktionary        User:Diuturno/monobook.js
itwiktionary        User:Virex/monobook.js
itwiktionary        User:Wim b/Admin.js
jawiki              User:Ac-dc/vector.js
jawiki              User:Amneltex/common.js
jawiki              User:Arkanosis/iKiwi.js
jawiki              User:Frozen-mikan/Archivebot.js
jawiki              User:青子守歌/trunk/LwMwApi.js
jvwiki              User:Meursault2004/monobook.js
jvwiki              User:Meursault2004/vector.js
jvwiki              User:PL 001/vector.js
jvwiki              User:Prabot/monobook.js
jvwiki              User:Prabot/vector.js
jvwiki              User:Pras/vector.js
kawiki              User:Deu/upload.js
kawiki              User:Giorgi Balakhadze/Giorgi Balakhadze.js
kawiki              User:Giorgi Balakhadze/Qui.js
kawiki              User:Gota/monobook.js
kawiki              User:ITshnik/monobook.js
kawiki              User:Island/monobook.js
kawiki              User:Zangala/monobook.js
kawiktionary        User:Deu/monobook.js
kawiktionary        User:ITshnik/vector.js
kkwikibooks         User:Bolatbek/vector.js
kowiki              User:Bart0278/vector.js
kowiki              User:Cwt96/common.js
kowiki              User:Dus2000/monobook.js
kowiki              User:Dus2000/vector.js
kowiki              User:Ho949494/vector.js
kowiki              User:Keasung/HotCat.js
kowiki              User:Klutzy/common.js
kowiki              User:Kwj2772/UploadForm.js
kowiki              User:Namoroka/RefToolbarLegacy.js
kowiki              User:Poragon/common.js
kowiki              User:PuzzletChung/bracketmacth.js
kowiki              User:Theoteryi/hotcat.js
kowiki              User:분당선M/vector.js
kowiki              User:아드리앵//vector.js
kshwiki             User:DerHexer/monobook.js
kshwiki             User:Matanya/vector.js
lvwiki              User:Edgars2007/MediaWiki:RefToolbarLegacy.js
lvwikibooks         User:Wordsthink~lvwikibooks/qpreview.js
lvwikibooks         User:Yyy/qpreview.js
mediawikiwiki       User:Bawolff/vector.js
mediawikiwiki       User:Jarandhel/vector.js
mediawikiwiki       User:Josse.Cottenier/editcount.js
mediawikiwiki       User:King kolton9/APIQuery.js
mediawikiwiki       User:Kwj2772/hotcat.js
mediawikiwiki       User:Lieutenant S. Reznov/common.js
mediawikiwiki       User:Mschel/monobook.js
mediawikiwiki       User:Salvatore Ingala/Notes/HotCat.js
mediawikiwiki       User:WhatamIdoing/common.js
metawiki            User:Bencmq/script/stewardlinks.js
metawiki            User:Diegusjaimes/global.js
metawiki            User:EdoDodo/hotcat.js
metawiki            User:Erwin/stewardlinks.js
metawiki            User:Greeves/monobook.js
metawiki            User:Grind24/stewardlinks.js
metawiki            User:He7d3r/Tools/Edittools.js
metawiki            User:He7d3r/Tools/jsUpdater.js
metawiki            User:He7d3r/global.js
metawiki            User:Kanonkas/AJAXStalkcontribs.js
metawiki            User:Kanonkas/SBHandler.js
metawiki            User:Kanonkas/moverevert2.js
metawiki            User:Kanonkas/quicktag.js
metawiki            User:MohandesWiki/global.js
metawiki            User:Paracel63/global.js
metawiki            User:Pathoschild/Script:InterwikiRecentchanges.js
metawiki            User:Pathoschild/Scripts/Ajax framework.js
metawiki            User:PiRSquared17/temp.js
metawiki            User:Thehelpfulone/MakeAutoPatroller.js
metawiki            User:Thehelpfulone/omnitag.js
metawiki            User:VasilievVV/stewelect.js
metawiki            User:Vätte/global.js
minwiki             User:Iwan Novirion/userinfo.js
mkwiki              User:Мастер теней/monobook.js
mlwiki              User:Anoopan/ചൂടൻപൂച്ച.js
mlwiki              User:AswiniKP/subpages.js
mlwiki              User:Jigesh/Gadget-HotCat.js
mlwiki              User:Lijorijo/monobook.js
mlwiki              User:Sadik Khalid/HotCat.js
mlwiki              User:Sadik Khalid/vector.js/quality.js
mlwiki              User:Sadik Khalid/വർഗ്ഗം.js
mlwiki              User:Tinucherian/Gadget-HotCat.js
mlwiki              User:മാതൃകാ ഉപയോക്താവ്/ചൂടൻപൂച്ച.js
mlwiki              User:മാതൃകാ ഉപയോക്താവ്/വർഗ്ഗം.js
mlwikibooks         User:Jyothis/Gadget-HotCat.js
mlwikibooks         User:Rameshng/വർഗ്ഗം.js
mlwikiquote         User:Akhilan/വർഗ്ഗം.js
mlwikiquote         User:Kiran Gopi/ചൂടൻപൂച്ച.js
mlwikiquote         User:Kiran Gopi/വർഗ്ഗം.js
mlwikiquote         User:Thachan.makan/വർഗ്ഗം.js
mlwikiquote         User:മാതൃകാ ഉപയോക്താവ്/വർഗ്ഗം.js
mlwikisource        User:Akhilan/hotcat.js
mlwikisource        User:Manojk/hotcat.js
mlwikisource        User:Thachan.makan/വർഗ്ഗം.js
mrwiki              User:Priynag/RefToolbarLegacy.js
mrwiki              User:Rahuldeshmukh101/redhot.js
mrwiki              User:Tusharvjoshi/HotCat.js
mrwiki              User:संतोष दहिवळ/HotCat.js
mrwikibooks         User:Rahuldeshmukh101/redhot.js
mrwikisource        User:Dr.sachin23/vector.js
mrwikisource        User:Rahuldeshmukh101/redhot.js
mswiki              User:Ezagren/vector.js
mswiki              User:Zamwan/monobook.js
mznwiki             User:پسر آمل/SnipManager.user.js
nds_nlwiki          User:Silver Spoon/Gadget-HotCat.js
newiki              User:Bhawani Gautam/refToolbarPlus.js
nlwiki              User:Arkanosis/iKiwi.js
nlwiki              User:Dinosaur918/userinfo.js
nlwiki              User:Erik Zachte/userinfo.js
nlwiki              User:Freestyle/monobook.js
nlwiki              User:Jasper Coenraats/Gebruikersinformatie.js
nlwiki              User:Jelte/monobook.js
nlwiki              User:Jimius/monobook.js
nlwiki              User:Josse.Cottenier/EditCount.js
nlwiki              User:Kameraad Pjotr/qpreview.js
nlwiki              User:Mork/monobook.js
nlwiki              User:Mwpnl/qpreview.js
nlwiki              User:Myr/UserContributionsInfo.js
nlwiki              User:Oliphaunt/monobook.js
nlwiki              User:Qampina/userinfo.js
nlwiki              User:Rodejong/Zeusmode/whatlinkshere.js
nlwiki              User:Rodejong/ajaxpreview.js
nlwiki              User:Siebrand/vqd.js
nlwiki              User:Sumurai8/templredir.js
nlwiki              User:TeunSpaans/qpreview.js
nlwiki              User:Tom Meijer/monobook.js
nlwiki              User:Ucucha/monobook.js
nlwiki              User:WOLF LΔMBERT/gebruikersinfo.js
nlwiki              User:Waninge/twinklefluff.js
nlwiki              User:Zanaq/test.js
nlwiki              User:Zugführer/monobook.js
nlwikibooks         User:Kameraad Pjotr/qpreview.js
nlwikibooks         User:Warddr/monobook.js
nowiki              User:Cocu/util.js
nowiki              User:Dvyjones/twinklefluff.js
nowiki              User:Dvyjones/wikEd.js
nowiki              User:Finnrind/toolbox.js
nowiki              User:Joulée/monobook.js
nowiki              User:Seren-dipper/userinfo.js
orwiki              User:Ansumang/markusers.js
orwiki              User:Ansumang/metadata.js
orwiki              User:Ansumang/qui.js
orwiki              User:Odisha1/qui.js
orwiki              User:Odisha1/refToolbarPlus.js
outreachwiki        User:Cirt/Gadget-HotCat.js
plwiki              User:Arkanosis/iKiwi.js
plwiki              User:Lampak/DelReqHandler branch.js
plwiki              User:Lampak/DelReqHandler stable.js
plwiki              User:Lancer WRC/monobook.js
plwiki              User:Miner/MediaWiki:Notifier.js
plwiki              User:Misza13/twinklefluff.js
plwiktionary        User:Marcowy zając/monobook.js
ptwiki              User:Alchimista/er.js
ptwiki              User:Alchimista/hotcat.js
ptwiki              User:Angus Weazley/teste.js
ptwiki              User:Arkanosis/iKiwi.js
ptwiki              User:Danilo.mac/fastbuttons.js
ptwiki              User:Enrique Suarez Infante, S J/twinkle.js
ptwiki              User:Leandromartinez/fastbuttons.js
ptwiki              User:Leon saudanha/morebits.js
ptwiki              User:Leon saudanha/twinklefluff.js
ptwiki              User:Martín Coba Pulido/Jeux.js
ptwiki              User:Miguel Couto/er.js
ptwiki              User:Miguel Couto/morebits.js
ptwiki              User:Miguel Couto/twinklefluff.js
ptwiki              User:Miguel Couto/twinklewarn.js
ptwiki              User:Nelson Teixeira/SnipManager.user.js
ptwiki              User:Odie5533/SnipManager.user.js
ptwiki              User:Willy Weazley/SnipManager.user.js
ptwikisource        User:Nuburos/vector.js
ptwiktionary        User:Danilo.mac/fastbuttons.js
quwiki              User:Diego Grez-Cañete/Hotcat.js
rowiki              User:Anneto/Hot-cat.js
rowiki              User:Firilacroco/Hot-cat.js
rowiki              User:Macy/quickpreview.js
rowiki              User:Macy/statuschanger.js
ruwiki              User:Abiyoyo/metadata.js
ruwiki              User:Alex Smotrov/bookmarks.js
ruwiki              User:Alex Smotrov/undocomment.js
ruwiki              User:Arkanosis/iKiwi.js
ruwiki              User:Atorero/monobook.js
ruwiki              User:Carn/Gadget-dropdown-menus.js
ruwiki              User:Claymore/copyvio.js
ruwiki              User:Claymore/goodarticles.js
ruwiki              User:Claymore/incubator.js
ruwiki              User:Denisbaltin/qsave.js
ruwiki              User:Egor Shustoff/common.js
ruwiki              User:EvgenyGenkin/monobook.js
ruwiki              User:Hogart/monobook.js
ruwiki              User:INSAR/oneclickkeep.js
ruwiki              User:Js/archiver.js
ruwiki              User:Js/linkcomplete.js
ruwiki              User:Mashiah Davidson/bookmarks.js
ruwiki              User:Redline/monobook.js
ruwiki              User:SaintBot/statuschanger.js
ruwiki              User:Samal/incubator.js
ruwiki              User:Saminmihail/archiver.js
ruwiki              User:Samopalov/monobook.js
ruwiki              User:Serpent Vlad/featuredarticles.js
ruwiki              User:Serpent Vlad/temp/песочница.js
ruwiki              User:SkyBon/metadata.js
ruwiki              User:Sozertsatel/common.js
ruwiki              User:Spectorman/ajax-delete-code.js
ruwiki              User:Spectorman/notifier.js
ruwiki              User:Torin/qpreview.js
ruwiki              User:Urutseg/SnipManager.user.js
ruwiki              User:VasilievVV/links.js
ruwiki              User:VasilievVV/oneclickkeep.js
ruwiki              User:Victoria/feturedarticles.js
ruwiki              User:Victoria/oneclick.js
ruwiki              User:Vlsergey/simpleku.js
ruwiki              User:Wanwa/movemenot.js
ruwiki              User:Zaqq/script.js
ruwiki              User:Zaqq/vector.js
ruwiki              User:Миннемуллин Булат/vector.js
ruwiktionary        User:Infovarius/qpreview.js
sahwiki             User:Мастер теней/monobook.js
simplewiki          User:Animum/massdelete.js
simplewiki          User:Bsadowski1/watchlistUpdate.js
simplewiki          User:DefenseSupportParty/samepageedit.js
simplewiki          User:EdoDodo/hotcat.js
simplewiki          User:Foxj/warn.js
simplewiki          User:Grunny/refToolbarLegacy.js
simplewiki          User:Hazard-SJ/qui.js
simplewiki          User:Hydriz/refToolbarPlus.js
simplewiki          User:Juliancolton/massdelete.js
simplewiki          User:Microchip08/preview.js
simplewiki          User:Microchip08/uberdiff.js
simplewiki          User:Nataly8/qui.js
simplewiki          User:NonvocalScream/monobook.js
simplewiki          User:PiRSquared17/ICE.js
simplewiki          User:PiRSquared17/MRBK.js
simplewiki          User:PiRSquared17/import.js
simplewiki          User:Pilif12p/Monobook.js
simplewiki          User:Sonia/quickpreview.js
simplewiki          User:Souravmohanty2005/vector.js
simplewiki          User:Synergy/easyblock.js
simplewiki          User:Tdxiang/easyblock.js
simplewiki          User:Tdxiang/qui.js
simplewiki          User:Tygrrr/monobook.js
simplewiki          User:Werdan7/twinklearv.js
simplewiki          User:Werdan7/twinklediff.js
simplewiki          User:Werdan7/twinklefluff.js
simplewiki          User:Werdan7/twinklespeedy.js
siwiki              User:තඹරු විජේසේකර/moverevert2.js
siwiki              User:තඹරු විජේසේකර/samepageedit.js
siwiki              User:තඹරු විජේසේකර/script installer core.js
siwiki              User:බිඟුවා/Gadget-HotCat.js
siwiki              User:බිඟුවා/refToolbarPlus.js
siwiktionary        User:බිඟුවා/Gadget-HotCat.js
skwiki              User:Peko/monobook.js
skwiki              User:Sudo77(new)/RefToolbarLegacy.js
sourceswiki         User:Crower/Dictionary2.js
sourceswiki         User:George Mel/monobook.js
sowiktionary        User:Foxall/wiked.js
sqwiki              User:Euriditi/Gadget-ZoomOnThumb.js
srwiki              User:BokicaK/quickpreview.js
srwiki              User:Kaster/shablon.js
srwiki              User:Саша Стефановић/quickpreview.js
srwikinews          User:Bawolff/opinion.js
svwiki              User:Arkanosis/iKiwi.js
svwiki              User:Arnef/monobook.js
svwiki              User:Castrup/monobook.js
svwiki              User:Fenix/monobook.js
svwiki              User:Fluff/cfau.js
svwiki              User:Fluff/monobook.js
svwiki              User:Fluff/slumpstub.js
svwiki              User:Fluff/vector.js
svwiki              User:Grillo/monobook.js
svwiki              User:Gurre/monobook.js
svwiki              User:Hannibal/monobook.js
svwiki              User:Hannibal/vector.js
svwiki              User:Haxpett/vector.js
svwiki              User:Herr X/monobook.js
svwiki              User:Herr X/vector.js
svwiki              User:JerkerES/monobook.js
svwiki              User:Jsdo1980/monobook.js
svwiki              User:Jsdo1980/vector.js
svwiki              User:Lenitha/monobook.js
svwiki              User:Lokal Profil/ny-Common.js
svwiki              User:MikaelLindmark/monobook.js
svwiki              User:MrMagic/monobook.js
svwiki              User:Necator/salt.js
svwiki              User:Necator/twinklearv.js
svwiki              User:Necator/twinklediff.js
svwiki              User:Necator/twinklefluff.js
svwiki              User:Necator/twinkleprod.js
svwiki              User:Necator/twinkleprotect.js
svwiki              User:Necator/twinklespeedy.js
svwiki              User:Pasqual/common.js
svwiki              User:Pasqual/monobook.js
svwiki              User:Pmartin/monobook.js
svwiki              User:Popperipopp/monobook.js
svwiki              User:Seren-dipper/userinfo.js
svwiki              User:StefanB/monobook.js
svwiki              User:StefanB/myskin.js
svwiki              User:Strangnet/twinklefluff.js
svwiki              User:Vivo/monobook.js
szlwiki             User:Przemub/wp sk.js
tawiki              User:Aathavan jaffna/saveandedit.js
tawiki              User:L.Shriheeran/User info.js
tawiktionary        User:Jagwar/common.js
tawiktionary        User:Mahir78/hotcat.js
tawiktionary        User:Mahir78/translate.js
test2wiki           User:Quedel/js/Benutzer:Ireas/düp-monobook.js
test2wiki           User:Theopolisme/common.js
testwiki            User:Alifakoor/radesaaz.js
testwiki            User:Gadget850/RefToolbarLegacy.js
testwiki            User:Grind24/mystatus.js
testwiki            User:Matanya/vector.js
testwiki            User:Merlissimo/modern.js
testwiki            User:Nathan2055/common.js
testwiki            User:Quentinv57/Gadget-TrollOptions.js
testwiki            User:RickK/monobook.js
testwiki            User:Riley Huntley/closeAFD.js
testwiki            User:Rjd0060/test.js
testwiki            User:Stigmj/monobook.js
testwiki            User:Łukasz McKita/sk.js
thwiki              User:Jutiphan/Scripts/editor/monobook.js
thwiki              User:Pubat/Scripts/editor/monobook.js
thwikibooks         User:Lux2545/vector.js
thwikiquote         User:Lux2545/vector.js
thwiktionary        User:Lux2545/vector.js
tlwiki              User:Maskbot/Gadget-HotCat.js
trwiki              User:Animum/monobook.js
trwiki              User:Animum/monobook.js
trwiki              User:BetelgeuSeginus/Hızlı bilgi.js
trwiki              User:BetelgeuSeginus/Hızlı bilgi.js
trwiki              User:DR.Child/cactions.js
trwiki              User:DR.Child/cactions.js
trwiki              User:Hetanaheta/HotCat.js
trwiki              User:Hetanaheta/HotCat.js
trwiki              User:Kumul/JS2.js
trwiki              User:Superyetkin/VikiDuyuru.js
trwiki              User:Superyetkin/VikiDuyuru.js
trwiki              User:Vito Genovese/Hızlı bilgi.js
trwiki              User:Vito Genovese/Hızlı bilgi.js
trwiki              User:Vito Genovese/Hızlı engel.js
trwiki              User:Vito Genovese/Hızlı engel.js
trwiki              User:Vito Genovese/Pratik menü 2.js
trwiki              User:Vito Genovese/Pratik menü 2.js
trwiki              User:Vito Genovese/Pratik menü.js
trwiki              User:Vito Genovese/Pratik menü.js
trwikibooks         User:Joseph/HotCat.js
trwikinews          User:Srhat/vector.js
trwikinews          User:Vito Genovese/HotCat.js
trwikiquote         User:Cekli829/HotCat.js
trwikiquote         User:Dabeon/HotCat.js
trwikiquote         User:Vitruvian/HotCat.js
ugwiktionary        User:Oyunqi/common.js
ugwiktionary        User:Oyunqi/edittools.js
ukwiki              User:Js~ukwiki/patroller.js
ukwiki              User:Olvin/patroller.js
ukwiki              User:Pkravchenko/monobook.js
ukwiki              User:Хинт/Gadget-HotCat.js
ukwiki              User:Хинт/patroller.js
viwiki              User:Alphama/userinfo.js
viwiki              User:Future ahead/easyblock.js
viwiki              User:Magicknight94/patroller.js
viwiki              User:Nguyễn Thanh Quang/Revert.js
viwiki              User:Nguyễn Thanh Quang/wikiEd.js
viwiki              User:Trần Nguyễn Minh Huy/Template.js
viwiki              User:Trần Nguyễn Minh Huy/easyblock.js
viwiki              User:Vinhtantran/Revert.js
viwikibooks         User:Nguyenthephuc/monobook.js
viwikisource        User:Vinhtantran/HotCat.js
viwiktionary        User:Nguyenthephuc/monobook.js
warwiki             User:Zscout370/ajaxbatchdelete.js
wikidatawiki        User:GZWDer/common.js
wikidatawiki        User:Reza1615/userinfo.js
wikidatawiki        User:Riley Huntley/dropdown-menus.js
yiwiki              User:שמאלץ/morebits.js
zh_yuewiki          User:Hillgentleman/morebits.js
zh_yuewiki          User:Hillgentleman/twinklearv.js
zh_yuewiki          User:Hillgentleman/twinklediff.js
zh_yuewiki          User:Hillgentleman/twinklefluff.js
zh_yuewiki          User:Hillgentleman/twinkleprod.js
zh_yuewiki          User:Hillgentleman/twinklespeedy.js
zh_yuewiki          User:Hillgentleman/twinklewarn.js
zhwiki              User:Bencmq/QPreview.js
zhwiki              User:Bencmq/cactions.js
zhwiki              User:Chaplin/wikEd.js
zhwiki              User:Fantasticfears/RefToolbarLegacy.js
zhwiki              User:HW~zhwiki/Notifier.js
zhwiki              User:Jimmy Xu/scripts/cactions.js
zhwiki              User:Moonian/qui.js
zhwiki              User:Onlymyself65536/monobook.js
zhwiki              User:Sameboat/ajaxpreview.js
zhwiki              User:Shibo77/metadata.js
zhwiki              User:Tommyang/Script/cactions.js
zhwiki              User:Tommyang/Script/userinfo.js
zhwiki              User:Xiaq/simple.js
zhwiki              User:YFdyh000/AjaxPatrolLinks.js
zhwiki              User:زكريا/common.js
zhwikinews          User:Horacewai2/HotCat.js
zhwiktionary        User:范/common.js

(total: 1367, shown: 1367)

3 results from private wikis omitted (though, I don't think that posting them would expose much)

#!/bin/bash

for foo in sajax_debug_mode sajax_request_type sajax_debug sajax_init_object sajax_do_call wfSupportsAjax
do
      mwgrep $foo --user --max-results 5000 > ~/txt/$foo-user.txt
      mwgrep $foo --max-results 5000 > ~/txt/$foo.txt
done
Sams-MacBook-Pro:txt reedy$ grep -i private *
sajax_init_object-user.txt:## Private wiki results
Sams-MacBook-Pro:txt reedy$

These were therefore removed

So yeah, ajax.js exposed two variables and four functions (for which Reedy helpfully mwgrepped above, thanks Reedy), all but one of which can be fixed with just search-and-replace:

  • sajax_debug_modefalse
  • sajax_request_typeGET
  • sajax_debug(console.log(
  • sajax_init_object()new XMLHttpRequest()
  • wfSupportsAjax()true

Only sajax_do_call requires some examination, and that's used in a total of 4+20 pages across all wikis, according to Reedy's mwgrep.

Anyone feel like running a quick crosswiki bot?

(Looking at the actual scripts, some do stupid stuff like sajax_init_object () or new sajax_init_object(), so you might want to do some more restrictive searches first.)

Anyone feel like running a quick crosswiki bot?

Probably should be run from someones account with interfaceeditor or similar...

In both the cases of document.write() and sajax, for how long have we been telling users directly (in the browser console, on their talk pages, via e-mail) that these interfaces are no longer supported? @MrStradivarius suggested a three-month warning period. I'd go a bit further and suggest six months. What's the rush? If we really need a formal policy that spells this out, I'm sure we can create one on mediawiki.org.

sajax has been emitting console warnings since June 3, 2013: rMW35b6b63e48b9: mediawiki.legacy.ajax: Wrap Sajax methods in mw.log.deprecate (1.22).

document.write was deprecated since 2007.. It never worked in early versions of Chrome and Safari, so we actively steered people away from it for years. I fixed hundreds of scripts on en.wikipedia in 2007

I think the problem is that while these functions have been deprecated for years, and while there have been warnings in the JavaScript console and on the mailing lists for years, the message hasn't been getting through to our end users at all. Most users don't read the mailing lists, and most probably don't even know that their browser has a JavaScript console. Even people who write user scripts will often ignore warnings in the console, either because they never check them after writing the script, because they may not know how to fix the problems, or because they retire from their respective wikis.

However, these scripts are often still in use for workflows that are important to the various communities (the scripts for enwiki's Featured picture candidates that Adam Cuerden mention are a good example). This means that someone in the community will need to fix scripts that they didn't write, otherwise their community's processes will break. And that takes time. If everyone who wrote a script using Sajax was around and able to update it, then a week might be enough. But unfortunately, we don't have that luxury.

I agree with everything you said, I just don't think that it's very useful to then put very expensive resources into fixing those last 10%, of which a large part in user script space, probably will never be executed ever again, because the user is no longer active. Experience has shown that at some point, you just need to pull the trigger. It would have been nice however, if we had put out the wikitech user notice BEFORE actually pulling the trigger. I think that was rather bad form.

I agree with everything you said, I just don't think that it's very useful to then put very expensive resources into fixing those last 10%, of which a large part in user script space, probably will never be executed ever again, because the user is no longer active. Experience has shown that at some point, you just need to pull the trigger. It would have been nice however, if we had put out the wikitech user notice BEFORE actually pulling the trigger. I think that was rather bad form.

By "pull the trigger" do you mean before the patch was merged or before it was deployed? (In any case, I just sent a notification to wikitech-ambassadors and wikitech-l)

I just don't think that it's very useful to then put very expensive resources into fixing those last 10%, of which a large part in user script space, probably will never be executed ever again, because the user is no longer active. Experience has shown that at some point, you just need to pull the trigger.

There are ways that are a lot smarter than just pulling the trigger, though. We could run a script to find out how many users were using a Sajax script, and whether they were active or not. We could notify script authors and community noticeboards a few months before the plug was due to be pulled. And then the week before, we could fix the remaining scripts that were in use by more than, say, 100 active users, and then leave talk page messages for all of the other users. Just breaking all of the scripts with the only on-wiki warning being Tech News two days before the deadline is not going to please people.

Can anyone point me in the direction of the documentation for the Sajax library? It doesn't appear to be linked anywhere from the Legacy JavaScript page, and it's going to be tricky for me to fix existing gadgets if I don't know how they work.

Can anyone point me in the direction of the documentation for the Sajax library?

This is what I found on mediawiki.org before it got replaced by $.ajax: https://www.mediawiki.org/w/index.php?oldid=424998

@MrStradivarius, See also some hints by Matmarex higher up in this thread #1514898

Can anyone point me in the direction of the documentation for the Sajax library? It doesn't appear to be linked anywhere from the Legacy JavaScript page, and it's going to be tricky for me to fix existing gadgets if I don't know how they work.

So yeah, ajax.js exposed two variables and four functions (for which Reedy helpfully mwgrepped above, thanks Reedy), all but one of which can be fixed with just search-and-replace:

  • sajax_debug_modefalse
  • sajax_request_typeGET
  • sajax_debug(console.log(
  • sajax_init_object()new XMLHttpRequest()
  • wfSupportsAjax()true

Only sajax_do_call requires some examination, and that's used in a total of 4+20 pages across all wikis, according to Reedy's mwgrep.

Anyone feel like running a quick crosswiki bot?

(Looking at the actual scripts, some do stupid stuff like sajax_init_object () or new sajax_init_object(), so you might want to do some more restrictive searches first.)

Yes, I saw that, but I was wondering if Sajax was documented somewhere that explained those things. There are a couple of things in the library that I'm not sure about:

  1. Is the object you get with sajax_init_object() exactly the same as an XMLHttpRequest object, or are there some differences? I've been given the impression that the only difference is that the Sajax object was supported in IE6, but it would be nice to get confirmation.
  2. Can there be other types of request for sajax_request_type, e.g. POST?

I wasn't sure about sajax_do_call either, but the link that @Ciencia_Al_Poder found explained it pretty well. Also, it seemed likely that there was some documentation out there, because otherwise it would have been pretty hard for all those people to write all of those Sajax scripts.

This is only relevant if we fix scripts by hand, of course. Fixing them by bot is a brilliant idea, and we should definitely do it. But fixing them manually would let us avoid writing things like if ( true ) where before we wrote if ( wfSupportsAjax() ), so it would be superior to the bot approach, if a lot slower and more tedious. We could also take the opportunity to update other bad/deprecated code in our scripts while we are fixing Sajax.

Also, it seemed likely that there was some documentation out there, because otherwise it would have been pretty hard for all those people to write all of those Sajax scripts.

You'll probably need to look in the history of various pages, like https://www.mediawiki.org/w/index.php?title=Manual:Ajax&oldid=424998

I found a good one at enwiki's WikiProject User scripts. That's probably the one that everyone was using.

  1. Is the object you get with sajax_init_object() exactly the same as an XMLHttpRequest object, or are there some differences? I've been given the impression that the only difference is that the Sajax object was supported in IE6, but it would be nice to get confirmation.

It doesn't matter in a MediaWiki context since JavaScript isn't loaded for IE7 and 6 anymore.

  1. Can there be other types of request for sajax_request_type, e.g. POST?

GET and POST, yes. No idea if stuff like PUT was theoretically supported, but I'd dare to claim that virtually all sajax calls used either GET or POST.

Also, it seemed likely that there was some documentation out there, because otherwise it would have been pretty hard for all those people to write all of those Sajax scripts.

Something about bug #1 (T2001) and all...

This is only relevant if we fix scripts by hand, of course.

Which we should definitely do, as it allows to fix various other issues, too. Code style is a pet peeve of mine, but there are "real" issues with many of such legacy scripts still using sajax -- if a script is using sajax, it's likely also using raw wg globals (instead of mw.config.get( 'wgWhatever' )), addOnloadHook, etc.

But fixing them manually would let us avoid writing things like if ( true ) where before we wrote if ( wfSupportsAjax() ), so it would be superior to the bot approach, if a lot slower and more tedious. We could also take the opportunity to update other bad/deprecated code in our scripts while we are fixing Sajax.

+2

There's still various copies of scripts manually copied to other wikis, that should just be updated from an "upstream" copy, and/or loaded directly from a canonical source

E.g. hotcat etc

There's still various copies of scripts manually copied to other wikis, that should just be updated from an "upstream" copy, and/or loaded directly from a canonical source

E.g. hotcat etc

In the meantime, I wonder if T110149: [AOI] Fix HotCat on wikis where it is broken and T112555: [AOI] Find out which wikis have local copies of HotCat that are broken improved that situation.

Updated trail of sadness... Private wikis (arbcom_nl and otrswiki) results removed. They only total 3. But one is a hotcat copy

There's still various copies of scripts manually copied to other wikis, that should just be updated from an "upstream" copy, and/or loaded directly from a canonical source

E.g. hotcat etc

In the meantime, I wonder if T110149: [AOI] Fix HotCat on wikis where it is broken and T112555: [AOI] Find out which wikis have local copies of HotCat that are broken improved that situation.

Sams-MacBook-Pro:txt reedy$ grep -i -c hotcat *.txt | grep -v 0
sajax_init_object-user.txt:69
sajax_init_object.txt:25
Sams-MacBook-Pro:txt reedy$

But as a whole, the situation doesn't look to have improved any