Moment.js is quite a large library and seems to replicate some of the logic we have in mw.msg. In Popups for example, this library is used to render a message "Edited 33 minutes ago", and this accounts for over 50% of the code. (See T137775)~ [JR: Popups no longer uses]
In MobileFrontend rather than using Moment.js we use a small library to provide information about last modified time with units. We then use this information in getLastModifiedMessage to render one of several messages.
This approach seems cheaper.
My question: should we deprecate use of moment.js in core for a more simplistic library, based on the MobileFrontend library (or some other library), that can be used with messages?
Usages in core:
- mediawiki.Upload.BookletLayout – https://gerrit.wikimedia.org/r/c/mediawiki/core/+/1149431 and https://gerrit.wikimedia.org/r/c/mediawiki/extensions/VisualData/+/1149430
- mediawiki.ForeignStructuredUpload.BookletLayout – https://gerrit.wikimedia.org/r/c/mediawiki/core/+/1139100
- mediawiki.special.block
- mediawiki.special.editrecovery
- mediawiki.widgets.DateInputWidget
- mediawiki.widgets.expiry
As of 2025-06-01 on enwiki, commonswiki, wikidata.org, the following modules use mw.Uri:
- ext.checkUser.userInfoCard
- ext.cx.dashboard
- ext.cx.stats
- ext.discussionTools.init
- ext.echo.dm
- ext.flow.templating
- ext.growthExperiments.Homepage.Impact
- ext.growthExperiments.MentorDashboard
- ext.pageTriage.util -- https://gerrit.wikimedia.org/r/c/mediawiki/extensions/PageTriage/+/1152434
- ext.RevisionSlider.init -- https://gerrit.wikimedia.org/r/c/mediawiki/extensions/RevisionSlider/+/1149478
- ext.translate.special.managetranslatorsandbox
- ext.visualEditor.mwimage -- https://gerrit.wikimedia.org/r/c/mediawiki/extensions/VisualEditor/+/1149427
- mediawiki.widgets.DateInputWidget
- mediawiki.widgets.expiry
Object.entries(mw.loader.moduleRegistry).flatMap(([module, config]) => config.dependencies.includes("moment") ? [module] : [] );Code search: https://codesearch.wmcloud.org/search/?q=global+moment
Suggested alternatives:
- mediawiki.DateFormatter https://doc.wikimedia.org/mediawiki-core/master/js/module-mediawiki.DateFormatter.html
- JavaScript Intl.DateTimeFormat https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat
- JavaScript Intl.RelativeTimeFormat https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat
- JavaScript Intl.DurationFormat https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DurationFormat
- in the future: JavaScript Temporal https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal