* $wgEnableAPI and $wgEnableWriteAPI are now deprecated and will be removed in
a future version. The API is now considered to be stable, secure and
essential.
+* $wgUsejQueryThree was removed, as it is now the default. This was documented as a
+ temporary variable during the migration period, deprecated since 1.29.
+* $wgLogoHD has been updated to support svg images and uses $wgLogo where
+ possible for fallback images such as png.
+* (T44246) $wgFilterLogTypes will no longer ignore 'patrol' when user does
+ not have the right to mark things patrolled.
+* Wikis that contain imported revisions or CentralAuth global blocks should run
+ maintenance/cleanupUsersWithNoId.php.
=== New features in 1.31 ===
-* …
+* Wikimedia\Rdbms\IDatabase->select() and similar methods now support
+ joins with parentheses for grouping.
+* As a first pass in standardizing dialog boxes across the MediaWiki product,
+ Html class now provides helper methods for messageBox, successBox, errorBox and
+ warningBox generation.
+* (T9240) Imports will now record unknown (and, optionally, known) usernames in
+ a format like "iw>Example".
+* (T20209) Linker (used on history pages, log pages, and so on) will display
+ usernames formed like "iw>Example" as interwiki links, as if by wikitext like
+ [[iw:User:Example|iw>Example]].
+* (T111605) The 'ImportHandleUnknownUser' hook allows extensions to auto-create
+ users during an import.
=== External library changes in 1.31 ===
* …
==== Removed and replaced external libraries ====
-* …
+* (T17845) The deprecated 'jquery.badge' module was removed.
+* The deprecated 'jquery.autoEllipsis' module was removed. Use the CSS
+ text-overflow property instead.
+* The deprecated 'jquery.placeholder' module was removed.
+* The deprecated 'jquery.appear' module was removed. Use the
+ 'mediawiki.viewport' module instead.
+* The deprecated 'mediawiki.widgets.CategorySelector' module alias was removed.
+ Use the 'mediawiki.widgets.CategoryMultiselectWidget' module directly instead.
=== Bug fixes in 1.31 ===
-* …
+* (T90902) Non-breaking space in header ID breaks anchor
=== Action API changes in 1.31 ===
* …
regularly. Below only new and removed languages are listed, as well as
changes to languages because of Phabricator reports.
-* …
+* (T180052) Mirandese (mwl) now supports gendered NS_USER/NS_USER_TALK namespaces.
=== Other changes in 1.31 ===
* MessageBlobStore::insertMessageBlob() (deprecated in 1.27) was removed.
* The global function wfBCP47 was renamed to LanguageCode::bcp47.
* The global function wfBCP47 is now deprecated.
* The global function wfCountDown() is now deprecated in favor of
- Maintenance::countDown().
+ Maintenance::countDown()
+* The OutputPage class constructor now requires a context parameter,
+ (instantiating without context was deprecated in 1.18)
+* mw.page (deprecated in 1.30) was removed.
+* Article::getLastPurgeTimestamp(), WikiPage::getLastPurgeTimestamp(), and the
+ related WikiPage::PURGE_* constants, deprecated in 1.29, were removed.
+* The Article::selectFields(), Article::onArticleCreate(),
+ Article::onArticleDelete(), and Article::onArticleEdit() methods, deprecated
+ in 1.24, were removed.
+* Installer::locateExecutable() and Installer::locateExecutableInDefaultPaths()
+ were removed, use ExecutableFinder::findInDefaultPaths() instead.
+* Several methods for returning lists of fields to select from the database
+ have been deprecated in favor of similar methods that also return the tables
+ to select from and the join conditions for those tables.
+ * Block::selectFields() → Block::getQueryInfo()
+ * RecentChange::selectFields() → RecentChange::getQueryInfo()
+ * ArchivedFile::selectFields() → ArchivedFile::getQueryInfo()
+ * LocalFile::selectFields() → LocalFile::getQueryInfo()
+ * LocalFile::getCacheFields() with a prefix no longer works
+ * LocalFile::getLazyCacheFields() with a prefix no longer works
+ * OldLocalFile::selectFields() → OldLocalFile::getQueryInfo()
+ * RecentChange::selectFields() → RecentChange::getQueryInfo()
+ * Revision::userJoinCond() → Revision::getQueryInfo( [ 'user' ] )
+ * Revision::selectUserFields() → Revision::getQueryInfo( [ 'user' ] )
+ * Revision::pageJoinCond() → Revision::getQueryInfo( [ 'page' ] )
+ * Revision::selectPageFields() → Revision::getQueryInfo( [ 'page' ] )
+ * Revision::selectTextFields() → Revision::getQueryInfo( [ 'text' ] )
+ * Revision::selectFields() → Revision::getQueryInfo()
+ * Revision::selectArchiveFields() → Revision::getArchiveQueryInfo()
+ * User::selectFields() → User::getQueryInfo()
+ * WikiPage::selectFields() → WikiPage::getQueryInfo()
+* Due to significant refactoring, method ContribsPager::getUserCond() that had
+ no access restriction has been removed.
+* Revision::setUserIdAndName() was deprecated.
+* Access to TitleValue class properties was deprecated, the relevant getters
+ should be used instead.
+* DifferenceEngine::getDiffBodyCacheKey() is deprecated. Subclasses should
+ override DifferenceEngine::getDiffBodyCacheKeyParams() instead.
+* The deprecated MW_DIFF_VERSION constant was removed.
+ DifferenceEngine::MW_DIFF_VERSION should be used instead.
+* Use of Maintenance::error( $err, $die ) to exit script was deprecated. Use
+ Maintenance::fatalError() instead.
+* Passing a ParserOptions object to OutputPage::parserOptions() is deprecated.
+* Browser support for Opera 12 and older was removed.
+ Opera 15+ continues at Grade A support.
+* The Block class will no longer accept usable-but-missing usernames for
+ 'byText' or ->setBlocker(). Callers should either ensure the blocker exists
+ locally or use a new interwiki-format username like "iw>Example".
== Compatibility ==
MediaWiki 1.31 requires PHP 5.5.9 or later. There is experimental support for