Release Notes for XWiki 18.4.0
This is the release notes for XWiki Commons, XWiki Rendering and XWiki Platform. They share the same release notes as they are released together and have the same version.
This release enables realtime collaboration for the experimental BlockNote WYSIWYG editor and improves the display of the extension support plans. For developers, this release introduces a client-side component manager and a safe way to pass parameters to the translation macro. This release also fixes a number of security issues, with the highest severity being 9.3/10.
New and Noteworthy (since XWiki 18.3.0)
Full list of issues fixed and Dashboard for 18.4.0.
For Users
BlockNote Realtime Collaboration
The experimental BlockNote WYSIWYG editor integration now supports realtime collaboration based on Yjs. This feature is enabled by default. You just need to install the extension and edit the same wiki page. There are a couple of limitations that we are aware of, though:
- you need to force the edit lock to join the collaboration session
- there is no auto-save
- it doesn't use the realtime editing toolbar that is currently used by CKEditor integration
- macro output is included in the synchronization (e.g. if a macro shows private information that depends on the current user, that information will be shared with all the collaborators joining the same editing session)
- while it does support clustering (in a best case scenario), it doesn't handle recovery in case a cluster node is restarted or disconnected and reconnected (after some time)
We hope to handle these limitations in the next versions.
Miscellaneous
PDF Export Optimization: We discovered that the code responsible for transforming external links to internal ones, when the target page is included in the export, was quite inefficient. We optimized that code, reducing the export time by up to 2 minutes for large exports of 2k print pages. See the PDF Export Application for more information.
For Admins
Improvements to the display of extension support plans: Extension support plans now display fields horizontally, and provide a link to the supported extension documentation page.
For Developers
Client-Side component manager
Similarly to the server-side Component Module, it is now possible to define and inject components client-side (e.g., using JavaScript or Typescript). See the how-to for a complete example.
Change to ModelReferenceHandler's API
Two new methods have been added to ModelReferenceHandler's API: getParentDocumentReference and getParentSpaceReference. These provide backend-specific utilities to obtain parent references from an existing Cristal reference.
Script variable support in translation macro
It's now possible to pass to the {{translation/}} macro the name of the script variable containing the translation parameters. See Translation Macro for more details.
Added support for Object[] conversion
There was no support for conversion from to Object[] in the properties (macro parameters, filter properties, etc.), this is now fixed. Note that there was already support for various types of arrays (as part of Apache BeanUtils).
Eager and anonymous importmap entries
The importmap now allow defining two new kinds of imports:
- eager: the dependency is loaded when the page is loaded (tutorial)
- anonymous: the dependency is excluded from the importmap (tutorial)
Notification Messages HTML support
The notifications now only support HTML in their text message when it is explicitly allowed. To do so, an optional textHtml boolean parameters (default value: false) is available.
Example:
new XWiki.widgets.Notification('This is <strong>bold</strong>','done', { textHtml: true});Miscellaneous
Partial Binary Message Handler: If your WebSocket end-point needs to handle binary messages, you can now use the helper AbstractPartialBinaryMessageHandler:
session.addMessageHandler(new AbstractPartialBinaryMessageHandler(this.configuration.getMaxMessageSize()) { @Override public void onMessage(byte[] message) { // ... } });It collects and aggregates all the binary message parts, optionally allowing you to enforce an upper limit for the message size. See the WebSocket Integration module documentation for more information.
Notification Messages text format: An XWiki.widgets.Notification.textFormat() method is now available. It indicates how the text parameter is interpreted.
Callers can check for the presence of this method to decide whether to escape their input:- When this method is available, the text parameter is treated as plain text and must not be escaped.
- When this method is missing (before 18.4.0RC1/17.10.9), the text parameter is interpreted as HTML and may need to be escaped.
The returned value is always the "plain" string.
Confirmation Box text content format: And XWiki.widgets.ConfirmationBox.textContentFormat() method is now available. It indicates how the text parameter is interpreted.
Callers can check for the presence of this method to decide whether to escape their input:- When this method is available, the text parameter is treated as plain text and must not be escaped.
- When this method is missing (before 18.4.0RC1/17.10.9), the text parameter is interpreted as HTML and may need to be escaped.
The returned value is always the "plain" string.
Upgrades
The following runtime dependencies have been upgraded (they have a different release cycle than XWiki Commons, XWiki Rendering and XWiki Platform):
Translations
The following translations have been updated:
Security Issues
Security issues are not listed in issue lists or dashboards to avoid disclosing ways to use them, but they will appear automatically in them once they're disclosed. See the XWiki Security Policy for more details.
Known issues
Backward Compatibility and Migration Notes
General Notes
- When upgrading make sure you compare and merge the following XWiki configuration files since some parameters may have been modified, removed or added:
- xwiki.cfg
- xwiki.properties
- web.xml
- hibernate.cfg.xml
- Add xwiki.store.migration=1 in xwiki.cfg so that XWiki will attempt to automatically migrate your current database to any new schema. Make sure you backup your Database before doing anything.
Issues specific to XWiki 18.4.0
WikiLESSResourceReference
WikiLESSResourceReference#getDocumentReference and WikiLESSResourceReference#getAuthorReference can now throw an LESSResourceReference checked exception.
No more version.properties file by default
The file version.properties is not part of the WAR anymore, by default. It's still supported (and will still impact the value of XWiki#getVersion, and what's displayed in the footer), but it's not really needed to get the WAR version since a long time now (this information, along with various other metadata, is provided as part of the WAR's META-INF/extension.xed file).
API Breakages
The following APIs were modified since XWiki 18.3.0:
No breakage!
Credits
The following people have contributed code and translations to this release (sorted alphabetically):
- anonymous
- Cédric LAMBLIN
- Clemens Robbenhaar
- Clément Aubin
- dch
- DenisF
- flyger
- Gankov Andrey
- hongsikum
- Ilie Andriuta
- Jarle Sandmo
- LucasC
- Manuel Leduc
- Mario-Hofstaetter
- Marius Dumitru Florea
- mathpce
- Michael Hamann
- Nikita Petrenko
- Pierre Jeanjean
- Prachi Joshi
- Roland Walter
- Rostyslav Fitsyk
- Santiago W. Fernández Lorenzo
- Simon Urli
- Simpel
- Suguru Hirahara
- Thiago Krieck
- Thomas Mortagne
- Valdis Vitolins
- Vincent Massol
- xrichard