Changes Report

Last modified by Vincent Massol on 2017/05/31

Velocity upgrade to 2.2

After 9 years Velocity finally got a update. You can see a detailed changelog on https://velocity.apache.org/engine/2.2/changes.html but here are the important new things from XWiki script authors:

  • Allow expressions inside []: $foo[$bar + 1]
  • New strategy for reference boolean evaluation:
    • return false for a null object
    • return its value for a Boolean object, or the result of the getAsBoolean() method if it exists.
    • if directive.if.emptycheck is false (true by default), stop here and return true.
    • check for emptiness:
      • return whether an array is empty.
      • return whether isEmpty() is false (covers String and all Collection classes).
      • return whether length() is zero (covers CharSequence classes other than String).
      • returns whether size() is zero.
      • return whether a Number strictly equals zero.
    • check for emptiness after explicit conversion methods:
      • return whether the result of getAsString() is empty (and false for a null result) if it exists.
      • return whether the result of getAsNumber() strictly equals zero (and false for a null result) if it exists.
  • Support $array.empty, as for $list.empty
  • Fix parsing of $obj._method()
  • Have #foreach honnor the Closeable interface on the iterator
  • Fix regression: #set<tab>left-paren no longer valid grammar
  • Fix parser for '$map{key}' text rendering
  • #foreach should work over any Iterable class
  • Method arguments can now be expressions
  • Fixed quotes escaping so that doubling single quotes only works when enclosing quotes are single quotes (and same behaviour for double quotes)
  • Add ability to specify default values for macro parameters, e.g.; #macro(foo bar=1)
  • Add ability to place line comments next to macro parameter definitions
  • Block directives no longer require parenthesis so #@foo #end is now allowed. Also, brackets now work with Block Macros so #{@foo}bar#end works
  • Default block for empty loops: #foreach($i in []) loop block #else empty #end
  • Rendering of arrays should display their content, as for lists
  • New generic $collectiontool which replaces and enhances the former SortTool
  • New generic $logtool

Color Picker

The color picker used by the Flamingo Theme Application can now be re-used thanks to a new Velocity macro:

#set ($colorPickerParams = {
  'name': 'color',
  'value': '#85d4a9'
})
#colorPicker($colorPickerParams)

Checkout the Color Picker documentation for more information.

Better handling of webjar extensions

A new webjars Maven extension is now available to package webjar extensions the "standard" way. It automate a bit of plumbing when producing webjar artifact with Maven and more importantly it explicitly indicate that those are webjar so that Extension Manager apply special handling for them (which usually means not requiring programming right to install them).

See WebJAR Maven Handler for more informations about the Maven plugin.

If you can't depend on 9.0 yet you can also use <xwiki.extension.jar.type>webjar</xwiki.extension.jar.type> Maven property which have pretty much the same effect from Extension Manager point of view (for someone installing your extension on 9.0+ of course).

Templates from JARs

TemplateManager component now also search for templates in current Thread classloader which mean you can put your templates inside your JAR in the /templates folder. This is the last step to any JAR extension can provide default template which can be overwritten in a skin on in /template/ WAR resources.

New asynchronous rendering framework

It's now possible to easily enable asynchronous execution and caching for panels, wiki UI extensions and wiki macros.

The following fields have been added:

  • Asynchronous rendering (async_enabled): a boolean indicating if the element should be executed asynchronously. Disabled by default.
  • Cached (async_cached): a boolean indicating if the result of the execution of the element should be cached. Disabled by default.
  • Context elements (async_context): the context information required for the execution of the element (current user, current document, etc.). It's also used to generate the cache key.

A org.xwiki.rendering.async.AsyncContext Java class and corresponding $services.async script service have been introduced to control:

  • if the asynchronous execution should be enabled/disabled in the current context (in which case any following execution of panels will be synchronous no matter how it was configured in the first place for example).
  • a set of methods to help register a set of entities and components which should lead to cache invalidation if they are modified, for the current asynchronous execution.
  • a way to register some custom resources to remember. Their cached results will be reinjected later (for example it's used to remember the skin extensions required by a cached element). One can then implement org.xwiki.rendering.asyncAsyncContextHandler to restore them when using the cached content.

Table of content in the notifications email

Now, the events described in the notification emails are ordered by pages, and then by dates. To have a quick view of all the changes, a table of content is now displayed at the beginning of the mail.

Partial Wiki XAR Export

You can now do a partial export of your wiki from the wiki administration by selecting the pages you wish to export from a tree.

Custom conflict resolution in Extension Manager

We improved the Extension Manager conflict resolution to allow making specific choices for fixing some conflicts.

The conflicts that can be fixed with custom choices are displayed directly in the changes display by an orange bar. A blue area is reserved for the conflict resolution.
This blue area displays some text, and a select with several choices. The displayed text in the blue area is what will be used for fixing the conflict, you can see the text changing for each choice.

The conflict choices are the following:

  • current version (default): the conflict is fixed by getting the current changes
  • before your changes: the conflict is fixed by getting what was there before you starting to edit. Both latest version saved and your current changes would be lost for this conflict,
  • latest version saved: the change made on the latest version saved (the one you are conflicting with) are taken to fix the conflict
  • custom version: with this option, a text area is displayed to allow you to enter any new value to fix the conflict. Multiple lines can be entered.

If the choice text displays something in red, it is because no content is actually available for the chosen version to fix the conflict: usually it means the content in conflict will be removed with the choice made.

Name Strategies for Wiki Pages

A new Name Strategy Module has been introduced to allow administrators to have more control on the wiki page names.
The name strategies allow to validate and transform page names before they are created to comply with a defined policy.
The transformation of page name is performed before page creations through XWiki UI, while page name validation is performed at the API level.

Two strategies have been implemented as a start for this new feature:
  - the Character Replacement Strategy: allows to define forbidden characters in page names, and replacement characters for each. If no replacement characters are defined, the forbidden characters are simply removed from page names.
  - the Slug Name Strategy: allows to normalize page names to remove any special characters and accents.

By default, the Character Replacement Strategy is used with "/" (slash) and "\" (backslash) as forbidden characters, without defined characters. Only the page name transformation is enabled, page name validation is still experimental and should be used with caution. 

This new feature can be setup in the Administration in Editing > Name Strategies.

Filesystem templates now have programming right by default

It was decided to give filesystem template programming right by default. The used to be executed with the right of the current document.

In-place edit for plain wiki pages

You can now edit plain wiki pages in-place, if the WYSIWYG editor is the preferred content editor.

Extensible User Profile Menu

The user profile menu is now extensible. You can add new entries to the user menu using the org.xwiki.plaftorm.user.profile.menu User Interface Extension Point (UIXP).

Password Security Policy

It is now possible to chose some password policy rules that are applied when passwords are chosen (for registration) or when they are changed (by users or administrators).
The password policy rules are available in the Administration > Users & Rights > Registration.

You might find more details on the User Management.

Docker-based Multi-page PDF Export

The PDF Export Application (not bundled by default) added support for Docker-based multi-page PDF export. When installed, this application enhances the export modal to allow for multi-page selection when performing PDF export. Moreover, the PDF is now generated by default asynchronously on the server-side (in a background thread) using a headless Chrome web browser running inside a Docker container. At the end, the user is redirected to the generated PDF (as a temporary resource).

Inline editing for wiki macros

When developing a wiki macro, you can now insert the content of that macro by using a dedicated macro:

{{wikimacrocontent/}}

This new way of inserting the wiki macro content makes it by default editable directly in the WYSIWYG editor. If you want to test it, you can, for example, create the following wiki macro and try it:

{{velocity}}
{{box}}
{{wikimacrocontent/}}
{{/box}}

The content's size is $xcontext.macro.content.length() characters.
{{/velocity}}

Rename AWM Application

Starting with this version you can rename/move an application created with App Within Minutes by renaming/moving its home page. Be aware though that the application code is going to be regenerated if you rename the application, which means that code customizations will be overwritten as a consequence.

Checkout the App Within Minutes documentation for more information.

Improved performances

We have enabled asynchronous rendering of several UI elements: side Panels, Menu entries and more. This allows to have the page content rendered much faster than before giving a nice feeling of increased performance and snappiness.

Improved view of XClasses in Object editor

It is easier now to find the XWiki Class of interest by using the new suggest box that replaces the old select element. The old way of searching is still available so the user still can explore the full list of available classes.

Block preparation and caching

To continue the work on improving the performances and benefit from the Velocity scripts compilation introduced in 15.8, the concept of block preparation has been added to the Rendering framework. The goal is to pre-execute everything that does not rely on the context in a XDOM and cache it to not redo all this in each transformation pass.

The rendering framework now offers a helper to make a lot easier to cache part of the execution of a macro. When preparing a Block, the Macro transformation will call the new Macro#prepare API that any macro can implement to reduce the time spent in Macro#execute.

In 15.9, the following macros are prepared:

  • the content is compiled in the velocity macros
  • the wiki content is parsed (and the resulting blocks are prepared) in the following macros
    • box
    • info
    • warning
    • error
    • success
    • content
    • footnote
    • html
    • async
    • context
    • cache
    • container
    • gallery
    • translation

And the XDOM is prepared and cached in the following use cases:

  • The content of the UI extensions
  • The content of the panels
  • The content of the wiki macros

See ExtendingMacro for more details.

Page Likes

The Page Like feature allows users to Like pages. By default, this application adds a small button at the bottom of the pages, allowing users to like them. It also displays the total number of likes for the page. Notifications are sent when pages are Liked and it's possible to see your own liked pages or who liked a page.

Notifications fully replace the Watchlist

It's finally done! In this version, we have decided to disable the Watchlist in XWiki, by default. Instead, the Notifications Application is now the central feature in XWiki for notifications. 

Don't forget to warn your users about the need to enable email in their notification settings!

Note: you can rollback this change by disabling the Notifications Application and enabling the Watchlist again.

New Notifications Macro

It is now possible to list the notifications for the wiki by using the Notifications Macro. You can use it in any page or any dashboard. The goal is to be able to replace the Activity Stream which is going to be deprecated (too slow and missing some features).

Improved Attachment Index

The Attachments tab from the Page Index has been improved:

  • the Space and Page columns have been replaced with the Location column
  • the Type column is now the first column and you can sort and filter attachments by file type
  • the Type column uses the Icon Theme and shows a thumbnail preview for image attachments
  • there's a new column that displays the attachment file size, with support for sorting and filtering the attachments by their file size
  • attachments can be filtered by date using the new date range picker

We also fixed two important bugs:

  • the sort was not working correctly
  • attachments from hidden pages were displayed even if hidden pages were not visible

New experimental event store

The storage of the events is now asynchronous, they used to slow down every stored event before (document modification, blog post, etc.) since each of them was producing a blocking database insert query.

This version introduce the complete support of the new event store in the UI notifications (mail notification support is planned for 12.6). Pre filtering is not new and was introduced in 12.1 but it's part of a new architecture to manage user notifications.

The main differences with the current default behavior are:

  • events are associated with users right when they happen and the association is stored, this means changing your notification configuration won't have any impact on already stored user notifications
  • gathering of notifications associated with users is very fast because it's a simple request to get the list of already calculated associations
  • it will be possible to introduce much more advanced event filters since they won't be required to be translated into database queries anymore

The new event store and the pre filtering are disabled by default. You can enable both of these options in xwiki.properties configuration file using the following:

notifications.eventPreFilteringEnabled = true
eventstream.store.enabled=true

This won't disable the old event store which will be used as a fallback when something is not supported yet by the new store especially regarding the support of notification post filters which is not yet fully complete.

Replace Author when Deleting Users

Starting with this version deleting a user from the Administration requires 2 steps:

  • You have to disable the user first. Disabling the user prevents them from logging in and it doesn't break the scripts that they last modified. This is the recommended way to "remove" an user account from your organization.
  • If you really need to completely remove the user account then you can delete it. However, you should choose another user account with similar access rights to replace the delete one as page author of existing pages, otherwise, any scripts inside those existing pages will lose their rights and stop working.

Quick Icon Insertion

You can now search for and insert icons using the keyboard, by typing / (slash) and selecting the icon Quick Action. This opens a drop down that lists all the available icons.

Prevent redirections to untrusted domains

Redirections are now only performed to trusted domains in XWiki. The list of trusted domains is obtained from two sources:

  1. any URLs used to access the wiki is considered as trusted, as well as all the aliases used for subwikis,
  2. it's possible to specify in xwiki.properties the list of trusted domain by setting the property url.trustedDomains.

If a redirection is attempted to an URL whose domain does not belong to any of this source, a warning log will be output and the redirect is prevented. Note that it's possible to switch off this security mechanism by setting the property url.trustedDomainsEnabled to false.

Live Data Inline Editing

The Live Data Macro has been improved to support inline editing. When the edit mode is allowed on a live data macro, a user with the edit right on the content of a cell can double click on a cell to edit it. The content of the cell is then converted into a form. Pressing escape will cancel the modifications, whereas clicking outside the edited cell will save its content and the Live Data will be reloaded to reflect the update.

Asynchronous rendering improvements

  • Asynchronous support has been added to page content execution (include macro, display macro, view, #getRenderedContent, etc.)
  • Asynchronous support has been added to templates, see Template Module
  • Calls to hasAccess and checkAccess are automatically associated to cached elements and invalidated if the right change
  • Force refresh in the browser now also apply to asynchronous rendering cache located on server side
  • Support has been added for the following context elements (see Async)
    • RenderingContext target syntax
    • RenderingContext default syntax
    • RenderingContext restricted
  • UI improvements
    • The spinner is displayed only after 500ms so that it does not get in the way when the asynchronous execution is very fast
    • The AJAX request now retry every 500ms instead of blocking a HTTP input thread forever

Orphaned Dependencies Cleanup

A new step has been added to the Distribution Wizard right after the Flavor step. Its job is to make sure no orphaned dependency (extension installed as dependency but which don't have any backward dependency left) is left in the installed extensions. The step suggests to uninstall the invalid ones by default and make the others top level extensions (i.e. taken into account by the upgrade job). Among other things, it fixes long standing problems caused by deprecated extensions no longer included in the Standard Flavor, like the Watchlist UI.

XAR Children Export

It's now possible, for HTML and XAR formats, to export selected children along with the current page.

Link Autocomplete in WYSIWYG Editor

You can now create links to existing wiki pages and attachments directly from the editing area using the link auto-complete feature. Just type [ (open square bracket) followed by at least 2 characters and you will get link suggestions based on the typed text. Checkout the CKEditor Integration documentation for more information.

Inline Macro Content Editing

The macro content can now be edited inline with the WYSIWYG editor, if the macro is used on a separate line (stand-alone, not inside a paragraph of text) and the macro descriptor declares that its content is rendered without being transformed. There are a few macros that do this at the moment (box, info, warning, error and figure macros) but we're planing to add support for more macros in the next versions.

See the CKEditor Integration documentation for more information.

Improved Live Data Macro L&F

The UI of the Live Data Macro has suffered a couple of changes:

  • the hamburger menu has been moved to the right side, after the pagination
  • the reload button has been moved inside the menu
  • the menu groups are better separated
  • added loading animation
  • added support for resizing the columns in the table layout
  • improved labels

See the Live Data Macro documentation for more information.

Attachments usage refactoring

When moving an attachment, the pages using the moved attachment are now automatically refactored to point to the new location of the attachment. Advanced users can deactivate this refactoring in the move attachment form.

Global Notifications Filters

Administrators can now add global notification filters which will be copied as the default filters for any new user registering on the wiki. It's possible for administrators to define both global system filters and global custom filters. Since the default filters are copied, any change made to the global filters won't impact existing users.

XAR entry types improvements

Starting XWiki 10.4 we started to introduce the concept of page "Types".

  • Several ways to protect extension pages are now provided and can be configured in xwiki.properties:

    #-# The possible choices are:
    #-# * none: no protection at all
    #-# * warning (the default): everyone get a warning when trying to edit a protected document
    #-# * deny = EDIT/DELETE right is denied for everyone except for admins who just get a warning
    #-# * forcedDeny = EDIT/DELETE right is denied for everyone, admins can't force edit/delete
    #-# * denySimple = EDIT/DELETE right is denied for simple users except for simple admins who just get a warning
    #-# * forcedDenySimple = EDIT/DELETE right is denied for all simple users, simple admins can't force edit/delete
    # extension.xar.protection=warning
  • Main.WebHome page entry type is now demo since the wiki home page is configurable so there is no reason to prevent its deletion
  • XWiki.XWikiAdminGroup page entry type is now configuration, was forgotten in previous version
  • the type home has been removed since it was designed for wiki home page use case which does not make much sense anymore

Display images in a lightbox

Users can now open images from the page content in a lightbox. While hovering an image, a toolbar will appear with options for opening the image in lightbox mode or to download it. The lightbox will display the image along with some information about it, depending if it's attached to a wiki page or it's an external one, and with some actions like download, toggle the browser full screen mode or start a carousel play of all images found in the page content. You can toggle the visibility of the image caption and action buttons by clicking on the image.

The lightbox feature is disabled by default and can be enabled from the Administration, Look & Feel -> Lightbox section. Checkout the documentation for more information.

Realtime WYSIWYG Editing Bundled by Default

The realtime WYSIWYG editor is now bundled by default in XWiki Standard. It's still an experimental feature, so you have to enable it if you want to try it out. We refactored the code to make it a CKEditor plugin rather than a separate editor (based on CKEditor) so in order to enable realtime collaboration for the WYSIWYG editor you have to remove (uncheck) the "xwiki-realtime" from the list of disabled plugins in the CKEditor administration section. Make sure you read the list of known limitations before you try it out.

Listing of Extensions Vulnerabilities

A security vulnerabilities section is now available in the administration. This section present the state of the known vulnerabilities of extensions installed on the wiki.

This list is filled based on a periodic scan (running every 24h by default), and uses https://osv.dev/ as its vulnerability database.

Please note that the list does not include all extensions for now. Extensions that can't be upgraded through the extension manager are not included.

Therefore, do not consider a instance as exempt of know security issues if the list is empty. See our Security Policy to know more about our security practices.

The vulnerabilities presented in the screenshots are based on outdated extensions versions and does not represent the state of an up to date XWiki instance.
They are here to show what the UI looks like with known vulnerabilities listed.

New User API

We now have a new User API (see the History section to understand the various ways to get properties for a User and which APIs to use and which ones shouldn't be used).

Example from Java:

@Inject
private UserResolver<UserReference> userResolver;
...
User currentUser = userResolver.resolve(UserReference.CURRENT_USER_REFERENCE);
boolean isActive = currentUser.isActive()

Example from Velocity:

$services.user.resolveUser('').isActive()

Improved Code Viewer with Blame View

The code viewer (More Actions > View Source) has been improved to look nicer and have proper line numbers that support highlighting and linking.

A new Blame View was also added to the code viewer. In this mode, each line of the document's content is annotated with the last author that modified it and the revision in which this modification was introduced. The blame view also works when viewing the source of a document revision (other than the latest one) so it can be accessed at any point in the history of a document. See the documentation for more details.

Runtime injection of REST resources

  • It's now possible to install/uninstall/upgrade REST resources dynamically (it used to require a restart of XWiki)
  • Upgrading/uninstalling a JAR extension doesn't break REST resources coming from extensions anymore

New Export Modal

The Export Modal has been redesigned:

  • first you need to select the export format from the list of available formats, which are grouped by category and show an icon and a label; you can also type to filter the list of formats
  • if the selected export format doesn't support multi-page export or the current page is terminal then the export is triggered directly
  • if the selected export format supports multi-page export and the current page is nested then the Export Tree Modal is shown, allowing you to select the pages to export
  • depending on the selected format:
    • the export tree may show hidden pages (e.g. for XAR export) or not (e.g. for PDF export)
    • the initial selection in the export tree may consist only in the current page (e.g. for PDF export) or the current page and all its child pages (e.g. for HTML export)

Each export format may customize further the export tree or add additional steps (e.g. PDF Export Options modal).

Display recommended extensions in the Extension Manager

Extension Manager is now displaying only recommended extension by default.

You can still switch to All Remote Extensions. If no recommended extension is can be found for the provided search, the result for All Remote Extensions is displayed.

Client-side PDF Export

This release introduces a new extension that allows users to export wiki pages to PDF using the browser's print to PDF feature. It's not bundled in XWiki Standard yet but you can install it with the Extension Manager. The advantage of the client-side PDF export over the current server-side FOP-based export is that the result is closer to the way the wiki page looks in view mode (most of the skin styles are preserved). See the PDF Export Application for more information.

Exclude top level application pages from the Navigation Panel

The top level application pages are now excluded by default from the Navigation Panel. This allows the Navigation Panel to focus more on your own content pages.

New CAPTCHA API and CAPTCHA implementations

A new CAPTCHA Application and API have been implemented, replacing the old Captcha Module, thus making it even easier to use and validate a CAPTCHA in a form. Also, it's now very easy to change the CAPTCHA implementation that you want to use in your wiki, directly from Administration, without having to touch a line of code.

Also, a new and much more extensive JCaptcha implementation has been provided for the new API, that works offline and features image, sound and text CAPTCHAS. It is bundled by default with XWiki Standard.

As a popular alternative, a Google reCAPTCHA implementation is also available, installable as an extension using the Extension Manager.

The locations in XWiki where CAPTCHA is being used by default (e.g. Registration and Comments) will use the CAPTCHA implementation that you have enabled and configured in the "Administration >> CAPTCHA" section.

Script right is not allowed by default anymore

The XWiki default right scheme has been edited to not allow by default the Script right to all users anymore. We decided to perform this change as the Script right gives a lot of powers to users and we found many possible security vulnerabilities related to using this right. This change will not impact existing instance of XWiki that would perform an upgrade: it only concerns new instances. However we strongly suggest administrators to review the rights they give to users to not give Script right by default to all users, and to give it only to a subset of trusted users.

Improved Date Picker

The Date picker used to edit date properties has been improved. The new version is better integrated with the Bootstrap-based Flamingo skin and its UI adapts better to the provided date format configuration (e.g. by hiding UI elements that don't make sense). Checkout the Date Time Picker documentation for more information.

Page Picker for Macro Parameters

Macro parameters that expect a page reference can now use the Page Picker to help the users select the page without having to know the reference syntax. You can see this in action when inserting the Include, Display, Table of Contents, Dashboard and Context macros from the WYSIWYG editor.

Respect name strategy from WYSIWYG

It is now possible to create more easily links to page not yet existing from the link modal of the editor. One option is by typing a link name: the suggester will propose to create a link in current space, or for advanced user it's possible to specify the exact reference and to select the option to create the link with that specific reference. The other option is to create the needed hierarchy from the tree. The links that are created that way will always follow the configured name strategy of the wiki.

Required Rights

When the rights of the current author are different from the rights of the page author, a required rights analyzer is executed.

This analyzer can raise a warning if:

  • the current user has more rights than the content author (e.g., a macro previously failing by lack of right might start being evaluated)
  • the current user has less rights than the content author (e.g., a macro previously working might stop working by lack of rights)

Note that this analysis is currently disabled by default. See the Admins section.

Quick Editing Actions

You can now access most of the WYSIWYG editing features using the keyboard, just by typing / (slash). This opens the Quick Actions drop down that lists quick action suggestions based on the context. Rendering macros are exposed as quick actions. Checkout the CKEditor Integration documentation for more information.

Updated the menu structure to make it navigable with a keyboard. Now each menu with subsections contains a proper toggle button.

XJetty Debian packages

XWiki now comes with new Debian package based on a customized Jetty optimized for XWiki that you can use instead of the traditional Tomcat based XWiki Debian package which unfortunately don't work on Debian 12+. See InstallationViaAPT for mode details.

No more unset xobject property

Missing properties in an xobject (compared to the xclass) are now automatically added (with a null value most of the time) during save or when adding a new field in a class. Among other things it means you can now use fields in a database query without wondering if the field exist or not, no more missing result because the property is not set in some object yet.

Notifications

We have introduced a list of notifications in the top menu, that list some events that have occurred in the wiki recently: a page has been created, a new blog post has been published, etc...

See the Notifications Application's page to have more infos.

Experimental Realtime Wiki Editor

We cleaned up the Realtime Collaborative Plain WikiText Editor contributed extension and integrated it in the XWiki platform. It's not bundled yet in XWiki Standard but you can still try it out by installing it and following the documentation page.

Page picker velocity macro

You can now use a #pagePicker($parameters) velocity macro (works like #userPicker) to display an input auto-suggesting pages. Pages are searched by full name (e.g. Sandbox.Page) and title (depending on the locale of the user).

XWiki Enterprise is dead, long live XWiki Standard!

The XWiki Enterprise distribution of XWiki has been abandoned and replaced in 9.5 by a new XWiki Standard flavor.

Here are the main changes in 9.5 related to distribution packages and flavors:

  • XWiki Enterprise does not exist anymore
  • A new XWiki Standard flavor has been introduced (actually two: one for the main wiki and one for sub wikis like XWiki Enterprise had)
  • Administrators now install XWiki and get to choose which flavor they want (at the time of 9.5 release only XWiki Standard is available but there will be many more as contributors add new ones on http://extensions.xwiki.org) to install on top of it
  • A XIP package is provided to help with offline install use case
  • Graphical installers have been abandoned, too hard to maintain (and not working very well anyway) and not providing much value for something that was unusable in production

Optional extension dependencies

It's now possible for Extension authors to define which of the dependencies are mandatory and which are optional. The Extension Manager will install all of them by default but optional dependencies won't have any impact on the validity of the extension:

  • if the optional dependency install plan fail, the extension is installed without it
  • if the optional dependency is uninstalled, it won't uninstall the extension
  • if the optional dependency is missing at startup, it won't make the extension invalid

Experimental Realtime WYSIWYG Editor

We cleaned up the Visual Realtime Collaborative Editor contributed extension and integrated it in the XWiki platform. It's not bundled yet in XWiki Standard but you can still try it out by installing it and following the documentation page.

Docker-based Multi-page PDF Export

The PDF Export Application (not bundled by default) added support for Docker-based multi-page PDF export. When installed, this application enhances the export modal to allow for multi-page selection when performing PDF export. Moreover, the PDF is now generated by default asynchronously on the server-side (in a background thread) using a headless Chrome web browser running inside a Docker container. At the end, the user is redirected to the generated PDF (as a temporary resource).

CKEditor Integration Improvements

The CKEditor Integration extension has been upgraded to version 1.9 which brings a couple of improvements and bug fixes:

  • The "WYSIWYG Editor" section from the Wiki Administration has been extended to support CKEditor configuration
  • The link dialog has a new text input to specify the link label
  • The form action buttons are now available in full-screen mode
  • CKEditor has been upgraded to the latest stable version 4.5.11

Pinned Pages

You can now manually change the order of the pages displayed in all the page trees used in the wiki (Navigation tree, Breadcrumbs tree, Page Index Tree, etc). It's not a fully manual order but rather a mix of manual and automatic order: some pages, we call them "pinned" pages, are displayed first (in manual order), followed by the rest of the child pages in automatic order (e.g. by page title). You can pin pages at any level in the page tree hierarchy using the dedicated administration section. For a given parent (nested) page the list of pinned child pages is saved in its page preferences. The list of top level pinned pages are saved in the wiki preferences.

The screenshots show the effect of pinning the Nested1/Nested2/Pinned Page Example page in various trees in the XWiki UI (namely: Navigation tree, Breadcrumbs tree and Page Index Tree).

Besides the new administration section, we also updated the Navigation Panel administration section to allow you to change the order of the top level pages and save this manual order using pinned pages. Basically, whenever you move a top level page to a new position, that page and all its previous sibling pages become pinned. You can of course unpin a top level page.

WebSocket Integration

Starting with this version you can write WebSocket end-points as XWiki Components using the standard Java API for WebSocket (JSR 356). For deploying the end-points we rely on the servlet container, which means the servlet container needs to support WebSockets (i.e. it needs to provide an implementation of the JSR 356 specs). At the moment, this includes all the servlet containers we support. See the documentation for more information.

Improved Notifications email layout

The email layout for notifications has been totally redesigned.

Attachment Picker for Macro Parameters

Macro parameters that expect an attachment reference can now use the Attachment Picker to help the users select or upload a file without having to know the reference syntax. You can see this in action when inserting the Office Macro from the WYSIWYG editor.

Merge on save

Continuing the work started on XWiki 11.1 to warn users when performing conflicting edits on the same page, we finally implemented a merge on save mechanism.

This means that in case of conflict edition (two users saving the same document at the same time), instead of always displaying a window to the user asking what to do, we first try to perform a merge of both document. If the changes concerned two very different parts of the document (two different sections, an edit performed on an object against an edit of the content, etc) the user won't notice that a merge has been performed.

Now, some conflicts might still occur if both users tried to edit the same part of the document. In that case, a new window is displayed asking the user what to do.
The user will now have three different choices:

  • Merge the document and fix conflict with his/her own changes: this means that as much as possible, we try to merge the changes. Only for the part that are conflicting, we only kept the changes from the last user. This is the recommended choice.
  • Force save the document: this means no merge at all will be performed. Only the changes performed by the last user will be saved. It basically discards the changes made by the previous user.
  • Reload the editor: this choice might be taken very carefully as it might cause a loss of data. It means that the current changes performed on the document will be completely lost and the editor will be reloaded with the last changes.

The conflict window now display the changes that will be performed for each choices. Be careful with the parts in red since it shows what part of the document will be lost during the operation. Note that it's also possible to select two specific versions of the document to perform a comparison before making a choice.

Provide strategies for grouping notifications

Notifications used to be automatically grouped using an hardcoded algorithm based on type of events and documents attached to the events. Starting with this release, we provide strategies to allow choosing how to group the events to be displayed in alert and email notifications.

This work is still at early stage since we do not provide yet an UI for users to chose their strategies, neither we provide updated templates that would work properly with all type of strategies. So if developers want to use the new strategy, they'd need to customize the notification templates.

New Homepage

We replaced the Dashboard application from the main Homepage and added introductory steps as wiki syntax. This change will make it simpler for new users to edit the Homepage content, while also benefiting from some basic help concepts. The left panels area also showcases now the 'Navigation' panel, while the right panels area contain a 'Need Help?' panel.

Children Macro

A new {{children/}} macro has been added to display a tree view of all children of the current page.

Increased maximum size for pages title, reference and short strings

The maximum size of a page title, reference and short object properties strings moved from 255 to 768 characters.

Distinguish between system filters and custom filters in notification settings

The Notification settings UI has been modified to allow a better management of Notification filters. In particular, we now distinguish "System filters" which are filters provided as components and that users can only enabled and disabled, and "Custom filters" which are filters dedicated to specific locations that users can create themselves, enabled, disabled or delete. The Notification settings then display separately the system and custom filters, and we tried to improve the wording to explain what is their exact meaning.

For developer and administrators, note that we deprecated the old macro for notification filter preferences in favor of two dedicated macros: notification system filter preferences and notification custom filter preferences.

 

Independent Conflict Resolution

We introduced few releases ago a mechanism to detect and handle conflict edition (i.e. when two users save changes on the same page) during page edition.
Starting with this release, the conflict edition window allows one more choice: to fix each conflict individually.
This new choice is marked as advanced since it's not something easy to handle.

When choosing the new option, the UI is updated to display the changes between the latest version saved and the current version the user is trying to save. At each place a conflict occurred, the changes display an orange bar and a blue area is reserved for the conflict resolution.
This blue area displays some text, and a select with several choices. The displayed text in the blue area is what will be used for fixing the conflict, you can see the text changing for each choice.

The conflict choices are the following:

  • current version (default): the conflict is fixed by getting the current changes
  • before your changes: the conflict is fixed by getting what was there before you starting to edit. Both latest version saved and your current changes would be lost for this conflict,
  • latest version saved: the change made on the latest version saved (the one you are conflicting with) are taken to fix the conflict
  • custom version: with this option, a text area is displayed to allow you to enter any new value to fix the conflict. Multiple lines can be entered.

If the choice text displays something in red, it is because no content is actually available for the chosen version to fix the conflict: usually it means the content in conflict will be removed with the choice made.

Page fields now support auto-suggestion

You can now use the auto-suggestion feature on Page fields by typing the page title or the page reference. 

Activity Stream is not bundled anymore

The good old Activity Stream Application is not bundled anymore with XWiki. This decision has been made because the Notifications Application can now handle the same features with better performances.

As a consequence, we have also modified every applications that was using Activity Stream to use the new Notifications features.

For backward compatibility, we also provide a Legacy Notification Activity Macro that would help you not to break the pages you have created with the use of the {{activity/}} macro..

New Experimental Image Dialog

The WYSIWYG editor has a new (experimental) image dialog that simplifies the insertion and edition of images. The new dialog is currently disabled by default but you can enable it from the WYSIWYG Editor section in the Wiki Administration: look for 'xwiki-image' in the drop down of disabled CKEditor plugins and uncheck it then save.

The new image dialog is integrated with the Image Style Administration section so users can apply image styles defined by an administrator. Checkout the CKEditor Integration documentation for more information.

Attachment Picker Widget

A new widget is available to help users select or upload attachments. Here's how you can use it:

{{velocity}}
{{html clean="false"}}
#set ($attachmentPickerParams = {
  'name': 'attachment',
  'value': '[email protected]',
  'data-upload-allowed': $services.security.authorization.hasAccess('edit'),
  'data-accept': 'image/,.mp4,.pdf',
  'multiple': 'multiple',
  'placeholder': 'Select attachment'
})
#attachmentPicker($attachmentPickerParams)
{{/html}}
{{/velocity}}

Checkout the Suggest Widget documentation for more information.

App Within Minutes integration with Create Page dialog

We added a new step to the App Within Minutes wizard to configure the location where the application entries are created. This step generates a template provider for the application and thus exposes the application in the Create Page dialog. This means that now you can create application entries not only from the application home page (using "Add new entry") but also from other pages using the Create Page dialog.

New applications created with the new version of the App Within Minutes wizard will not use the Data page any more. The application entries will be created directly under the application home page by default. Of course, you can configure the location with the new wizard step.

Jobs improvements

  • org.xwiki.job.event.status.JobStatus#ask now allows passing a timeout as parameter
  • a new REST API is available to start any job, see Job REST API (require programming right)
  • the existing REST API to get the job status has been improved to also get the request and the log all at once

New event store and prefiltering by default

12.6 introduces the use of the new event store and pre-filtering of events by default.

Events are now stored in a Solr core (they are also still stored in the old database store for now as a retro compatibility measure).

User notifications are now associated to each user when they are generated and not when they are requested. This means that gathering is always fast and that the filtering of events is using the preference of the user at the moment the event was generated so modifying your preference will only affect new events. The pre-filtering processing is also asynchronous and done in a low priority thread to not impact the farm so there might be a delay between the action and the appearance of the related notification in the notification list in a very active wiki with a lot of users.

Even if it was implemented along the course of 12.x it's still the first time that this is enabled for most users so don't hesitate to report any notification related issue to https://jira.xwiki.org/projects/XWIKI. If you hit a blocker bug you can go back to:

  • post filtering of event using the property notifications.eventPrefilteringEnabled in xwiki.properties
  • use only the database store by disabling the new one using the property eventstream.store.enabled in xwiki.properties

New local extensions index

A new Solr based index of all the extensions available on the configured searchable repositories has been introduced. It's updated regularly (every hours in that version) and it also recommends compatible versions to install so that the default list you get in the Extension Manager UI only contains extensions which are not already installed and for which the install/upgrade should work in your instance.

Extension Manager improvements

  • Extension without any associated file are now supported (Extension#getType() return null or empty string in this case)
  • Maven modules of type pom or dependencies of type pom produce Extension with empty type
  • In general Extension Manager now have a better support for Maven dependencies of type different from the default type (this produce extensions with different ids on Extension Manager side)

Browser-based PDF Export Used by Default

Starting with this version the new browser-based (client-side) PDF Export is used by default, replacing the old PDF export based on Apache FOP (Formatting Objects Processor). Some of the benefits are:

  • dynamic content generated with JavaScript code is now included in the PDF export
  • the CSS styles used in the PDF export are the same as those used when viewing the wiki page
  • multi-page export supported by default
  • writing custom PDF templates is easier

The new PDF Export implementation is still young so you are encouraged to report any issues you may encounter, or propose improvements. If you want to get back the old PDF export implementation, it's easy: there's a configuration option on the PDF Export wiki administration section. If you want to disable the new PDF export implementation completely, that's also possible, either by leaving the list of PDF templates empty in the dedicated administration section, or simply by uninstalling the PDF Export Application.

Ability to store events in the event stream and display them as notifications

It is now possible to say to the Event Stream Module that some events, sent with the Observation Module, should be stored.

In addition, this events can be displayed in the notifications menu of users. See the tutorial: How to send notifications.

Multiple login attacks protection

A new Authentication Security Module has been integrated to prevent attacks on user accounts. This module allows to perform different strategies in case of repeated authentication failures.
For now two strategies are provided:
  - to ask user to answer a CAPTCHA challenge (default strategy)
  - to disable user account (in which case an administrator would have to activate it back)

The strategy is triggered whenever a user repeatedly failed to login in a given time window. The number of failed attempts and the duration of the time window are configurable in Administration > Authentication. Default values are 3 failed attempts in 5 minutes would trigger a CAPTCHA challenge for users.

System and Extension pages are now protected against accidental deletion

You will no longer accidentally erase system or extensions pages and break your wiki! When you try to delete such pages, XWiki will now ask you to confirm the operation, and list all concerned pages.

Attachment Gallery Picker Macro

An Attachment Gallery Picker Macro is now available.

This macro allows to search and select attachments. The results of the search are presented in a grid.

Flavors search optimization

Speed up display of flavors mostly containing core dependencies (when resolving flavors dependencies, just assume those with know recommended versions are valid).

New Page API

10.6 brings the Page concept which was introduced in 7.4 to the API and the macros.

PAGE EntityType and Page*Reference classes

First thing first we now have a few new types in EntityType and the corresponding typed Page*Reference helpers. One for each of the element you can have in a page:

  • PAGE
  • PAGE_ATTACHMENT
  • PAGE_OBJECT
  • PAGE_OBJECT_PROPERTY
  • PAGE_CLASS_PROPERTY

Corresponding resolvers/serializer/providers

Each of the already existing DOCUMENT oriented resolvers and serializers have their PAGE oriented implementation.

Conversion from DOCUMENT to PAGE world

The entity resolvers automatically convert from/to DOCUMENT from/to PAGE world references. So yes, using a resolver is the official way to do that conversion.

New syntax

Pages reference have a very different syntax.

To summarize it's a filesystem path syntax with support for parameters.

Here is are a few examples:

wiki:page1/page2;param1=value1;param2=value2;en_US

wiki:page1/page2/attachment

../siblingpage
  • separator: "/" between all elements except WIKI which is still ":"
  • escaping: still "\"
  • current, parent support: like in a file system you can refer to the current page or parent page/wiki using "." and ".."
  • parameters: we now have syntax to express the parameters of an EntityReference. Each parameter is separated by a ";" at the end of the entity name
  • default parameter: the syntax have the concept of default parameter which mean a parameter for which you don't need to indicate the name. For example PAGE reference default parameter is "locale"

New resource reference

A new resource reference of type PAGE has been added and can be used in links for example:

[[parent>>page:..]]
[[page:page1/page2]]

Miscellaneous

  • the $services.model API also got his own new helpers to manipulate pages
  • support for page references have been added to various oldcore (XWiki/XWikiDocument/Document) and bridge (DocumentAccessBridge) APIs
  • support for page references have been added to the security module

Restore a batch of deleted documents

If you have performed an operation that deletes multiple documents at the same time (like delete with children or delete space), it is now possible to restore all the deleted documents together, to their original state and location.

This is achieved by assigning a common batch ID to the deleted documents in the recycle bin. You can now browse the deleted documents and group them by batch.

For each deleted document, you can now also choose to see the batch where it was deleted from and if you want to restore just one document or the entire batch.

Check the documentation for more details.

New default Color Theme

We wanted to refresh the default color theme (Charcoal) for the XWiki Standard 10.x cycle and the community voted for the Iceberg theme, which is our new default theme. We kept a professional / clean look and feel and opted for blue as our main color. The purpose of the default color theme is to cover as many use cases as possible, so if you want to spice up your instance try one of our community contributed color themes

Date Time Picker

A new Velocity macro is available to create a date & time picker:

#set ($dateTimePickerParams = {
  'name': 'date',
  'data-format': 'dd/MM/yyyy HH:mm:ss'
})
#dateTimePicker($dateTimePickerParams)

Checkout the Date Time Picker documentation for more information.

The old WYSIWYG editor based on Google WebToolkit has been removed

In XWiki 8.2RC1 we made CKEditor the default WYSIWYG editor but the users could still use the old Google WebToolkit (GWT) editor by enabling it in the wiki administration. Starting with this version the old WYSIWYG editor is no longer available. CKEditor remains the only WYSIWYG editor option available in XWiki by default.

Watchlist to be replaced by Notifications

At the end of the 9.x cycle, we plan to remove the Watchlist Application from XWiki Standard. Before being able to do this, we need that the Notifications Application be able to propose the same features (and even more possibilities).

In this version, you can now receive notifications concerning a watched location (ie: a page, a page and its children, a wiki..), without enabling any specific type of events in the preferences.

This feature is disabled by default (and the Watchlist Application is active by default). See Notifications Application to know how to enable it.

XAR export/import changes

  • The XML produced in XAR files is now following the XML 1.1 specification (instead of 1.0). Since it's mostly about supporting thing that were simply not working before there should not be any retro compatibility issues.
  • All from/toXML methods located in classes like XWikiDocument, BaseObject, BaseClass, etc. are now based on Filter modules which became the only way to produce XAR XML format. The only difference remaining when using xwiki.action.export.xar.usefilter and xwiki.action.import.xar.usefilter properties in xwiki.cfg configuration file is the handling of the XAR packaging.

Image Style Administration

An Image Style Administration is now available. This interface allows to define standardized image styles that will later be used by the New Experimental Image Dialog to quickly define the appearance of images. 

Rich editor integration on comments and annotations

Comments and annotations are now edited using the preferred content editor specified in the user profile. They were previously edited using only a plain text editor. The WYSIWYG editor is now supported and it allows for easy insertion of mentions in comments and annotations.

Safe escaping when querying

When writing XWQL or HQL, it's easy to forget to escape the %, _ or even the [ character in LIKE clauses. It's also easy to forget that MySQL considers the default escape character to be \ and thus when you have a serialized Entity Reference in a LIKE you need to change the escape character as otherwise pages with dots (.) in their names won't match!

To avoid bother we're introducing a new Query Manager API when binding a value.

Example usage:

$services.query.xwql("xwqlstatement like :ref").bindValue("ref").literal("${documentReference}.").anyChars().query().execute()

Improved Notifications UI

The notifications menu is more clear now, and a link to see what has changed is available in the details of each event, when you click on the date.

In-place edit for application entries

The entries of a newly-created AppWithinMinutes application are now editable in-place. For existing applications you will need to edit the application and go through the application wizard so that the application sheet is re-generated, but be aware that you might loose you customizations in the process.

Drawer menu has changed

The drawer menu has changed to display the "scope" of the displayed items. Items are ordered regarding if their scope is "local" (i.e. it affects only the current wiki) and "global" (i.e. it affects the whole farm).

The change have been made after users complaining the old menu was not very clear, and after a poll sent on the mailing list.

Some items like "Home", "Create Wiki" and "Delete Wiki" has been removed from that menu, in order to focus on frequent operations that really deserve a place in this important menu. We offer other means in the UI to achieve these operations.

CKEditor Integration Improvements

CKEditor has been upgraded to version 4.6.0 which brings a new flat skin and a lot of improvements and bug fixes. The XWiki integration has been improved to support automatic link creation when dropping a non-image file over the editing area. Creating a link to a non-existing wiki page has been simplified. Check the CKEditor Integration documentation for more information.

Live Data Macro

A new Live Data rendering macro is available to display dynamic lists of data. You can see it as a replacement of the existing Live Table macro, but it's not limited to that. We plan to add support for:

  • multiple layouts (table, cards, etc.)
  • advanced filtering
  • multi-sort
  • selection and batch actions
  • in-place data editing and creation (including support for editing the data structure)
  • real-time synchronization

Maven exclusions support

Support for Maven dependency <exclusions> has (finally) been added. It means that, like in Maven, an excluded transitive dependency won't be downloaded when you install an extension. XWiki used to totally skip the whole concept of exclusion.

Simplified WYSIWYG Editor Toolbar

The WYSIWYG Editor toolbar has been simplified by grouping and reorganizing the buttons, removing those that were used very rarely. Here's a summary of the changes we did:

  • the Format drop down is now the first item on the left side
  • Strike, Underline, Subscript, Superscript and Remove Format have been grouped in a drop down menu
  • the list buttons have been grouped in a dedicated drop down menu
  • the Unlink button was moved from the main toolbar to the floating toolbar that is shown when you click on a link
  • we enabled the image floating toolbar, visible when an image is selected
  • Horizontal Line, Special Character and Import from Office have been grouped in a new Insert drop down menu
  • we moved the Insert/Edit Macro button to the Insert drop down menu, where we also added shortcuts for common macros
  • we removed the Copy, Cut and Paste buttons from the toolbar. They are available in the context menu
  • we removed the Copy Formatting button, as we don't encourage the usage of in-line styles
  • we removed the Language drop down because it was causing confusion with the wiki page language

As a result the toolbar now takes a single line by default.

Administrator can access user notification settings

It is now possible for administrators to get access to users' notification settings. This is done by clicking on the "Notifications" tab in the menu when looking a user profile. All the settings that a user can customize can now be set also by an administrator.

New filesystem recycle bin

To work around database limitation when deleting documents with a lot of attachments a new file recycle bin component has been introduced.

You can enable in xwiki.cfg configuration file with the following:

xwiki.store.recyclebin.content.hint=file

Auto-suggest for pages

Several inputs related to selecting pages references now support auto-suggestion, making it much simpler to use and less error prone (such as not having to know if the reference should end with WebHome or not!). See the screenshots for some examples.

Filesystem store by default

Filesystem store is now the default location for attachments and deleted documents. See attachment storage documentation for more details.

Warning conflict when editing a page

The edition of document is now protected against edition conflicts. It means that a user might now obtain a warning conflict window, in case another user saved the document in the meantime. This window prevents from erasing the changes made by the first user having saved. 

Extended Page Information

The information tab displayed at the bottom of each page has been extended with more information such as the original page locale, the current page locale, the available page translations, the page syntax and whether the page is hidden or not. Moreover, some of the page information is now editable in-place, from view mode.

New document type in XAR extensions

It's now possible to indicate a type for each entry in a XAR extension. The type indicates what actions are allowed for a document once it's installed (edit, delete) and how it should be handled during upgrade (merge, skip, overwrite, etc.). See XAR package format for more details about this new property.

Performance improvement in templates

Wiki skins and filesystem templates are now cached. In addition, the Velocity from Velocity templates (not yet those based on wiki syntax) is compiled to speed up following executions.

The first performances tests suggest that the XWiki Standard skin is now up to 5 times faster thanks to this caching.

It will continue to improve in upcoming versions of XWiki with the caching and compilation of Velocity (and other costly tasks) in other areas (templates located in JAR extensions, velocity scripts located in wiki content like UI extensions and panels, code macros, etc.).

Support of Mentions

XWiki Standard now support by default User Mentions. You can mention a user by two ways: either by typing "@" in the WYSIWYG editor as displayed in the screenshot, or by inserting a Mention macro. Mentioning a user will have for effect to send a notification to that user, with the link to the page or place (can be a comment or an object) mentioning her/him.

Application Index

We removed some applications from the AppBar (like Scheduler, Invitation, Panels, etc.) with the intention to simplify the interface and promote a smaller number of applications inside the AppBar panel. In order for the applications to still be discoverable, we added in the Drawer an Application Index.

Enable/Disable user account

it is now possible to disable a user account and to enable it back from his/her profile. A disabled user is able to login but cannot perform any action once logged-in.

Visual Diff

You can now view how a page has changed visually from one version to another. The changes are computed on the rendered page content. You can click on the ellipsis to expand the context (to see the parts that have not changed). See the documentation for more information.

Attachments backlinks indexation

An indexation of the attachments is now done on the wikis. This means that if PageA includes an attachment (or an image) from PageB, PageA will be listed in the backlinks of PageB.

Indexing the attachments requires a full reindexing of both the pages links and attachments usage of the wiki. This means that for a brief period of time, some pages backlinks might be partially incomplete, especially on large wikis.

Responsive Content in PDF Export

XWiki's user interface (UI) adapts automatically to the screen size (i.e. it's responsive), thanks to Bootstrap's grid system, and this sometimes applies even to the wiki page content. For instance the page content could be split into columns, the number of columns depending on the available screen width: a single column on extra small devices, 2 columns on small devices, 3 columns on medium and large devices. When exporting such a page to PDF the outcome can be different than what you see in view mode because the available width depends on the print page size which is different than the screen size. Starting with this version we're adapting Bootstrap's grid system for print media, in order to have a more predictable outcome:

  • extra small print: anything less than A4 portrait width => should match the behaviour from extra small screens
  • small print: A4 portrait up to A4 landscape => should match the behaviour from small screens
  • medium print: A4 landscape up to A3 landscape => should match the behaviour from medium screens
  • large print: A3 landscape and up => should match the behaviour from large screens

By default the PDF export uses the A4 print page size so it should match the behaviour from small screens. See the PDF Export Application for more information.

Notifications Filters Store

Due to scaling issue, we have changed the way the notification filter preferences are stored in the wiki. They are not saved in the user profile pages anymore, but in their own database table.

A migration to the new store is necessary for existing filter preferences. It is done automatically when you first start XWiki after upgrading, but it may take time.

Thanks to this improvement, we have re-enabled the default behavior for the Auto Watch feature so that users automatically watch pages they have contributed to.

Notifications Preferences

It is now possible to enable or disable all the notifications sent by an application.

Allow to force-download attachments based on their mimetype

It is now possible to decide which attachments should be always downloaded based on their mimetypes: until now two properties (attachments.download.whitelist and attachments.download.blacklist) were allowing to control the display of some attachments for security reasons, but those properties are not able to control the behaviour of attachments added by a user with programming rights.

A new property has been added to allow force-download any attachment, whoever added it:

#-# [Since 12.10]
#-# Define the kind of attachment that you always want to be downloaded and never displayed inline.
#-# By default this list is empty, but you can specify a list of mime-types (coma separated list of values) which
#-# should be always downloaded no matter who attached them or what is the whitelist/blacklist configuration.
#-#
#-# The distinction with the blacklist configuration above is that the blacklist won't affect file attached by a user
#-# with programming rights, while this configuration affect any attachment.
# attachment.download.forceDownload=

Default UI JAR dependencies installed on root namespace

JAR extensions of the default UI are now automatically installed on root namespace. This allows subwikis to be installed/upgraded by users without programming right.

Improvement of the icon API

It is now possible to manually pull icon theme resources and get a metadata map of an icon to customize the display.

See the Icon Theme Application extension for documentation.

New icons

We added new mappings for the menu, more-vertical, edit, copy, move, download, log-in, log-out, th icons. They can be used using the Icon Themes service and they have equivalent in both Silk and FontAwesome themes. 

Also with the upgrade to Font Awesome 4.7.0 we improved the mapping for the basket, bell_delete, book_addresses, cake, calendar_add, calendar_delete, cart_add, chart_curve, cursor, emoticon_smile, hourglass, newspaper, note, paintbrush, shape_group, shape_ungroup, sitemap, television, thumb_down, thumb_up, tick, user_add, user_delete, weather_snow icons.

Improved Groups Administration Section

The Groups section from the Wiki Administration has been improved:

  • Shows the group avatar
  • Shows the member type (User vs. Group) when listing the members of a group
  • Shows the group scope (Global vs. Local) when you are on a subwiki
  • Has nicer modal popups for creating, editing and deleting the groups

Improved Users Administration Section

The Users section from the Wiki Administration has been improved:

  • Shows the user avatar
  • Shows the user scope (Global vs. Local) when you are on a subwiki
  • Has nicer modal popups for creating, editing and deleting the users

Live Data Boolean Filter

The Live Data Macro now provides a new Boolean filter, allowing boolean values to be filtered using a drop-down field instead of a text field.

Syntax highlighting by default in the wiki editor

The Syntax Highlighting Application is now bundled and enabled by default.

Rendering error reporting improvements

All rendering error (missing macro, etc.) used to be hardcoded. It's now translatable and customization thanks to various extension points. See Rendering Error Reporting for more details about this new system.

Notification Filter Preferences that concern hidden pages are not listed anymore

Filters that concern hidden pages are not shown in the table, unless you enabled the option to see hidden pages. More informations: Hidden (technical) pages.

Ability to redirect deleted page link to a new page

When deleting a page, users can now select, using a page picker, a new target to be used for updating links that where pointing to the deleted page.

To fix eventual broken external links (e.g. bookmarks, links from emails), they can also create an automatic redirect from the old location to the new target.

In addition, to support restoring a deleted page with a redirect created (i.e. a page with the same name, but with a XWiki.RedirectClass added), a Replace action was added for the deleted pages. See Index Application Documentation.

Live Data in Batch Restore

The list of deleted pages that is displayed when restoring a batch of pages uses Live Data instead of Livetable.

Improved PDF Template

The default PDF template provided by the PDF Export Application has now better support for multi-page export:

  • the title of each exported wiki page is now included both in the content and in the table of contents (and from 14.9 final it is also styled differently in order to distinguish it from normal content headings)
  • the PDF header shows the title of the "current" wiki page, i.e. the wiki page that provided the content for the current PDF page
  • each exported wiki page starts on a new PDF page

Checkout the documentation for more information.

Hiding notifications that are read

Since the introduction of the Notifications Application in XWiki, it was possible to mark some notifications as "read". They were displayed differently, and not counted in the red circle above the bell, but they were still there.

Now, it is possible to decide not to show them anymore thanks to an option in the user's notification settings.

Filter users in notifications

You now have the ability to black list some users in the notifications you receive (by default you follow everyone).

XWiki on WildFly

XWiki now deploys fine out of the box on WildFly 14.x.

Non interactive mode in distribution job

The Distribution Job (on which Distribution Wizard is based) now support non interactive mode. For example if you want to fully automate an XWiki install and not get the Distribution Wizard you can use the the new Job REST API to start distribution job in non interactive mode before opening the instance to the public.

Notifications can now be received by emails

It is now possible to receive notifications by email. The feature is still quite new and the displayed content will be polished in future versions, but you can already use it.

All you need is to select, on your user settings, the types of notifications you are interested in. The emails are sent periodically and according to you preferences: hourly, daily or weekly.

This feature will progressively replace the Watchlist application that has been available in XWiki for several years now.

Increased the size of the lightbox dropdown buttons (download, details, ...).

Document Analysis progress page

A page is now available in the administration to monitor the progress of the document analysis queue. The page displays the number of remaining tasks, grouped by task type.

Filtering Query parameters

It's now possible to filter not only Query statements but also Query parameters or in general any value returned by a Query object. This is achieved through a new method in QueryFilter. See the Query Module for more details. Example:

@Component
@Named("myfilter")
@Singleton
public class MyQueryFilter implements QueryFilter
{
...
   @Override
   public Query filterQuery(Query query)
   {
       return new WrappingQuery(query)
           {
               @Override
               public String getStatement()
               {
                   return ... modified statement here...
               }
           };
   }
}

Extension sorted by rating

The Repository REST search API now sort extensions by Ratings when the search query is empty. This means that extensions will end up sorted by Ratings (per repository) in Extension Manager when accessing the Add Extension administration section. 

Note that xwiki.org needs to run XWiki 8.4RC1+ to see this feature for the extensions.xwiki.org extension repository (which is the one used by default in XWiki).

Attachment can be restricted based on their mimetypes

It is now possible to limit the attachments uploaded on a space based on their mimetypes. This attachment validation is now applied on attachment upload using the attachment pane, the REST API, and CKEditor image dialog.

The configuration can be done at farm level with xwiki.properties (see below), at wiki level in the administration, in the Attachments Restriction section, or at space level using the page administration.

#-# [Since 14.10RC1]
#-# Define the list of allowed attachment mimetypes. By default, this list is empty, but you can specify a 
#-# comma-separated list of allowed mimetypes. Note that a joker (*) can be used to accept any media type. Once this
#-# list is not empty, any attachment with an unlisted mimetype will be rejected.
#-# For instance, if you want to only accept plain text and any kind of images, you can set the list to:
#-# text/plain,image/*
# attachment.upload.allowList=

#-# [Since 14.10RC1]
#-# Define the list of blocked attachment mimetypes. By default, this list is empty, but you can specify a 
#-# comma-separated list of blocked mimetypes. Note that a joker (*) can be used to accept any media type. Once this 
#-# list is not empty, any attachment matching one of the listed mimetype will be rejected.
#-# For instance, if you want to reject plain text and any kind of images, you can set the list to:
#-# text/plain,image/*
#-#
# attachment.upload.blockList=

 

Active installs client now send the memory used by the instance.

Navigation Panel Configuration

The top level application pages are now excluded by default from the Navigation Panel. You can still access the corresponding applications from the Applications Panel. This allows the Navigation Panel to focus more on your own content pages. However, you can disable this filter (if you wish to see all the pages) or configure other page excludes from the Wiki Administration.

Figure Macro

A new Figure Macro was created to be able to add illustrations (images, tables, code, graphs, etc) along with optional captions.

Example:

...
{{figure}}
[[image:macaque.jpg||alt="Macaque in the trees"]]

{{figureCaption}}A cheeky macaque, Lower Kintaganban River, Borneo. Original by [[Richard Clark>>http://www.flickr.com/photos/rclark/]]{{/figureCaption}}
{{/figure}}
...

Wikimacro Content Type

It is now possible to specify the content type of a wikimacro when creating it. A new field Macro Content Type is available for this purpose.
Before 11.5RC1 release, a field Macro Content Type was existing and have been renamed Macro content availability in this release.

The Macro content type field will be used in the future to propose the right editor depending on the content type. It currently proposes two values: WIKI to specify that the content should be edited with an editor for wiki content, or UNKNOWN to specify it should be edited with a plain text editor.
Note that it also accepts any kind of custom Java values, such as java.util.List<java.lang.String>.

If left blank, the default value would be UNKWOWN. This is also the value for macro created before 11.5RC1.

Wiki macros can have several categories

The wiki macros can have several categories. The deprecated Default category is replaced by Default categories.

Menu Application bundled by default

The Menu Application has been bundled with the default XE flavor (on the main wiki only) in order to allow admins to easily setup and display a horizontal menu. It can be easily accessed from the Applications panel by admins (members of the XWiki.AdminGroup) only.

CKEditor Integration Improvements

The integration with the CKEditor has been improved to support putting dedicated Insert Macro buttons on the tool bar. We enabled the native (in-browser) spellchecker and we fixed a few bugs.

Partial import of Extensions

By default only the extension file is proxied from external source. Since XWiki 9.5RC1 you can bump proxy level up and proxy also previous extension versions and their dependency information. After update of extensions this information will no longer be kept in document objects but, when requested, proxied from external source. This may be enabled by setting Proxy Level attribute of ExtensionProxy XObject to File and Previous Versions. The point of bumping up proxying level is to save space in XWiki database.

The "page type" picker is bigger

In order to better see the available page types (like Encyclopedia, Article, etc...), the "page type" selector has been enlarged.

Document Tree Exclusions

The Document Tree macro has a new parameter named "exclusions" that allows you to exclude a list of nodes from the tree. For instance, in order to exclude the "XWiki" top level node you can use:

{{documentTree exclusions="document:xwiki:XWiki.WebHome" /}}

Check the documentation for more information.

Extension points for document information

New extension points in the document information panel and the information docextra allow to add extra settings or information that is directly related to a document's content and should thus be easily accessible together with the document in view or edit mode.

Include and exclude Notification filters

A user can now define notification filters that are either inclusive or exclusive.

Notifications that come from a document that matches an exclusive filter will then be discarded.

Notifications Filters Settings revamped

We have changed the way we display Notification Filters in the Notification Settings page. All filters are listed in a single table so that it is easier to manage (adding, disabling, removing from the same place).

Update of the UI extension point for the Drawer

The UI extension point DrawerItem has a new parameter called category in order to specify where the drawer item should be located (either in the local or global section).

Attachment storage size reduced

The current version of each attachment used to be duplicated in the storage, it's not the case anymore. See Filesystem. Note that it only applies to new attachments, existing attachments are not migrated during upgrades.

Office Import from CKEditor

We upgraded CKEditor Integration to its latest version which brings support for importing office files directly from the CKEditor. There's a dedicated button on the tool bar that opens a dialog where you can select the office file to import and you can choose to filter the styles or to use the Office Viewer macro. Checkout the CKEditor Integration documentation for more information.

New API to render a translation

There's now new LocalizationManager#getTranslation() and ContextualLocalizationManager#getTranslation() APIs to get a translation and render it for a target Syntax. For example:

@Inject
private LocalizationManager localizationManager;
...
try {
  String translation = this.localizationManager.getTranslation("key", locale, Syntax.HTML_5_0, parameters);
} catch (LocalizationException e) {
 // Error getting the HTML5 renderer
}

And

@Inject
private ContextualLocalizationManager localizationManager;
...
try {
  String translation = this.localizationManager.getTranslation("key", Syntax.HTML_5_0, parameters);
} catch (LocalizationException e) {
 // Error getting the HTML5 renderer
}

Added support for attachments bigger than 2GB

Attachment sized used to be limited by the size of a Java integer (2,147,483,647), the size is now a long (9,223,372,036,854,775).

Easily edit the app title

The title of an application created with App Within Minutes can now be edited from the last step of the application wizard. The application title is displayed on the application home page, on the applications panel and live table, on the breadcrumb, etc. See the App Within Minutes documentation for more information.

XWiki Select Widget can be filtered

When you use an XWiki Select Widget, you can now let the user filter the proposed options dynamically.

Security Vulnerabilities Reviews

The Security Vulnerabilities Application now takes into account vulnerabilities reviews maintained by the XWiki Development Team

Those reviews provide a more in-depth analysis of the security vulnerabilities found by the security scan. Known vulnerabilities that are analyzed as safe are displayed in a small font and will not raised the security notification.

Vulnerabilities with available reviews have a button next to them in the security listing Live Data, allowing to display the details of the reviews.

See the XWiki Security Policy for more details about our review process and to know where to reach us for questions.

Improved HTML Export

The HTML export has been improved to better scale with the Nested Pages concept. The exported pages are now located in directories named after the parent pages in which they are located. In addition a basic HTML index page (index.html) is now generated at the root listing and linking to all exported pages.

Disable notifications emails

You can disable the new notifications emails feature with the option notifications.emails.enabled on xwiki.properties.

Updated drag and drop feature of the Live Data Macro

The appearance of drag and drop controls for Live Data columns has been updated to be more straightforward to use. In addition, keyboard control is now fully supported for those controls. See Live Data documentation for more details on these new controls.

Added keyboard support for the like button.

Reliable page renames

A new low-level API have been introduced in the XWikiStoreInterface that allows performing an atomic rename of documents: this should improve efficiency of refactoring operations and allows better rollback in case of problems. However since it's a new unstable API concerning a sensitive feature we provided a switch-off configuration for it in xwiki.properties in case of trouble: 

#-# [Since 12.5RC1]
#-# Indicate to use the old implementation based on copy and delete, or the new implementation
#-# using an atomic operation on database (which allows efficient rollback).
#-# This property aims at being removed in the future once the atomic rename has been validated
#-# to work 100% fine. Only use it if you are facing an issue with the move/rename features.
#-#
#-# The default value is:
# refactoring.rename.useAtomicRename = true

Reset Extension changes

It's now possible to reset changes listed in the Extension diff.

Templates improvements

  • It's now possible to indicate that a template should be executed only once in the same request.
  • It's now possible to enabled asynchronous rendering and caching for a template.

 See Template Module for more details.

Easier Flamingo Skin customizations

We now provide a default less/custom.less file that can be overwritten for your custom Flamingo Skin. You don't longer need to manually overwrite less/style.less.vm in order to add your custom code. This will make the upgrade to a newer version of the skin much smoother.

Restricted TextArea

It's now possible to indicate in the configuration of a TextArea property if you want the content to be executed in a restricted context. See TextArea for more details.

This new property is now used in comments objects, which means you can display a comment content as any other textarea property without the need to make the context restricted.

Asynchronous document static analysis

A new asynchronous document static analysis API is now available in the Index Application. This API allows to queue and consume persistent document analysis tasks. This API is used in this release as an underlying implementation of the mentions analysis, and will be used soon to perform the analysis of the backlinks of the pages.

Prefixed Remote Solr core name

Solr cores are now prefixed by default with xwiki_ (except for the main core that is used for search, which is named xwiki).

Simplify usage of Include macro

It's now simpler to use the Include and Display macros. Some complex and never-used parameters have been removed from the WYISWYG editor's macro dialog UI. Specifically, the page parameter is now hidden and for the Include macro the context parameter is now deprecated (and thus hidden). This also allows to display a single way to choose the reference of the included/displayed page and to ensure that users use the provided page picker.

Suggestions for missing macros

When a macro does not exist, you get an error in the page where it's used. If that macro exists in an available extension and you're an Admin user, you will get a link to this extension to install it using the Extension Manager, right in the error message description.

Group manager

A new org.xwiki.user.group.GroupManager and corresponding services.user.group script service are now available.

See more details on User Module.

Use RequestFactory to create a request from the refactoring script service

The refactoring script service has been refactored: you need to access the new RequestFactory in order to create any kind of request.
For example a script using :

#set ($renameRequest = $services.refactoring.createRenameRequest($source, 'NewName')) 

should now use: 

#set ($renameRequest = $services.refactoring.requestFactory.createRenameRequest($source, 'NewName')) 

All the API related to refactoring operations themselves remains at the same place. See the Refactoring Module Documentation for all information.

New default notification filters

Default notification filters can now be created.
When a default notification filter is created, it appears as activated on every profile of every user. Each user can then choose to disable it (or re-enable it) by clicking on the "Advanced filtering options" link in its notification center.

In this version, only one default filter is provided (called "System Filter") and allows each user to hide (or not) notifications coming from the system user of XWiki.

Quick Image Insertion

You can now search for and insert images using the keyboard, by typing / (slash) and selecting the image Quick Action. This opens a drop down that lists latest images uploaded to the page and to the whole wiki. You can also upload new images directly from the drop down. Checkout the CKEditor Integration documentation for more information.

Detect Page Ready

It's now possible to detect and execute JavaScript code after the page is fully ready, i.e. after all resources have been loaded and there are no pending HTTP requests or promises:

require(['xwiki-page-ready'], function(pageReady) {
  pageReady.afterPageReady(() => {
    console.log('Page is ready!');
  });
});

This is currently used by the client-side PDF export to know when the page is ready for print and by the automated functional tests to know when to start interacting with the page (simulating user actions). See the Page Ready module documentation for more information.

Updated the comments modals

The comments pop-ups that are displayed for deleting a comment and for permalink are now bootstrap modals, having the same functionality as before.

Add pagination for Attachments

The attachments tab is now displayed using a Livetable, with only 5 rows displayed at a time to avoid a crowded section. This way, on pages with multiple attached files users can use the navigation and filtering options to search for specific attachments.

Improvements of the Menu Application on Mobile

The space taken by the horizontal menus created with the Menu Application has been reduced by introducing menu burgers on Mobile display. The burgers are placed on the left side of the page, to avoid confusion between the Drawer menu and the horizontal menus.

Differentiation of message types

Message boxes now include icons in their design. It makes it easier to differentiate one type of message from the other without having to rely on color (especially helpful for colorblind users!). In addition, their design has been slightly reworked to fit better in the current skin.

CKEditor Integration Improvements

CKEditor has been upgraded to the latest version 4.6.2 which brings a couple of improvements and bug fixes. The XWiki integration has been improved by enabling and configuring the Advanced Content Filter for the XWiki 2.1 syntax. This should prevent the editor from generating content that cannot be saved as wiki syntax. The filter disables automatically the editor features that generate such content. Another improvement concerns the Styles drop down from the tool bar. We removed the styles that were not supported by XWiki and we added some new styles that we hope you will like. The support for wiki rendering macros has also been improved. Inserting a block-level macro in-line will split the paragraph, avoiding the "macro cannot be used inline" error. Besides these improvements, there are a couple of integration bugs that have been fixed.

Cancel PDF Export

You can now cancel a running multi-page PDF export job, either because you triggered it by mistake (for a large subtree of pages) or because it takes too long, or any other reason. See the PDF Export Application documentation for more information.

Quick Link to a new Attachment

You can now upload and link to an attachment using the keyboard, by typing / (slash) and selecting the Link Quick Action. This opens a drop-down that now supports uploading attachments.

Date filter in Livetables

You can now filter by date in the livetable.

More required rights analyzers

More required rights analyzers have been implemented, warning about rights required for UI extensions, HTML via the raw macro and correctly analyzing the content and parameters for the context and cache macro.

Prevent users from deleting/moving/renaming pages containing used XClass

Users are now warned when they make refactoring operations (delete, move or rename) in pages that contain used XClass. Simple users are forbidden to realize those operations, whereas advanced users get an UI to allow them selecting the pages to refactor. 

The RSA Crypto script service issues SHA256 certificates by default

The RSA Crypto script service (accessible from services.crypto.rsa) now issues certificates signed with SHA256+RSA instead of SHA1+RSA. See XWIKI-19676 to learn more.

The notifications macro can now handle tags

The "tags" parameters can be used to filter events that concern pages marked with some given tags. In a multi-wikis environment, it works only on the current wiki.

Allow to define a default XAR entry type when building XARs

Added the option <defaultEntryType>myEntryType</defaultEntryType> in the configuration of the XAR plugin when building XAR artifacts.

When defined, the default enty type will be applied to every entry not being overridden through the <entries>...</entries> list in the plugin configuration.

See the Maven XAR Plugin documentation for more information about this feature.

New Options for Allowed HTML Elements and Attributes

New options for HTML cleaning were added that allow precise control which attributes and elements are allowed in XWiki syntax but also in the HTML macro in restricted contexts. The default settings should be fine but in case you notice any breakage due to attributes no longer working or want to restrict certain features like inline-styling, consult the documentation on these options. Do not hesitate to contact us on the forum or the chat in case you notice unexpected breakages or other issues with this change.

Option to use custom temporary file name for download

The temp action supports a new parameter (force-filename) to indicate the file to pass to the browser when force-download is enabled. See Standard URL Format for more.

PDF Export Administration

The administration section provided by the PDF Export Application has been extended to support:

  • selecting and configuring the tool used to generated the PDF
  • showing the state of the PDF generator
  • and since 14.9 final, setting the page ready timeout, that is the number of seconds to wait for the web page to be ready for print before aborting the PDF export

Checkout the documentation for more information.

Force client-side PDF generation

The PDF Export application has a new global setting to control whether the PDF is generated server-side (e.g. using a headless Chrome web browser running inside a Docker container) or client-side, using the user's web browser:

# [Since 14.6RC1]
# Whether the PDF export should be performed server-side, e.g. using a headless Chrome web browser running inside a
# Docker container, or client-side, using the user's web browser instead; defaults to server-side PDF generation
export.pdf.serverSide=true

Note that client-side generation has the downside that different users may get a different PDF result for the same wiki page (same content).

Delete all from the recycle bin

It is now possible to permanently delete all pages that have been already deleted, in order to clean the recycle bin. See Index Application Documentation.

Ratings on Extensions Repository home page

Rating is now displayed in the Repository App's home page livetable.

New script service for URL security operations

A new script service has been introduced to allow performing security checks on URL. The script service currently provides a single method which can be used like that:

{{velocity}}
#set ($myURL = "http://xwiki.org")
#set ($safeURI = $services.security.url.parseToSafeURI($myURL))
## The URI is null if not safe.
#if ($safeURI)
 ## use it as an URI object. 
#end
{{/velocity}}

Switch to source while editing in-place

You can now switch to source while editing in-place the content of a page.

Page Count for Data Types

The Data Types live table now shows the number of pages that use each data type.

Solr multi-core improvements

Solr core are now created at runtime (for embedded Solr setup) so it's not needed to restart after installing an extension which require a custom Solr core.

This version introduces org.xwiki.search.solrAbstractSolrCoreInitializer which provide a lot of helpers for creating/migrating Solr cores. See more details on Solr Search Application.

Increasing contrast

Some elements of the XWiki interface systematically didn't achieve the minimum contrast defined in the Web Content Accessibility Guidelines.

Instances using Iceberg - the default color theme - or no color theme, are now patched to avoid those systematic violations.

Contrast is notably higher on buttons or light texts.

Changes for the Iceberg UI:

  • Navigation bar is very slightly darker
  • Links are slightly darker
  • Breadcrumb text is darker.
  • Muted text (e.g. description of a template when creating a page, [+] to add tags, ...) is darker
  •  The buttons have more contrast:
    • Blue buttons have a slightly darker background
    • Red buttons have a darker background
    • Green buttons have a darker background
    • Yellow buttons have a lighter background and their text is swapped from white to black

Changes for the no-theme UI:

  • The anchors in the right side drawer are darker.
  • Breadcrumb text is darker.
  • Muted text is darker
  • The buttons have more contrast:
    • Blue buttons have a slightly darker background
    • Red buttons have a darker background
    • Green buttons have a darker background
    • Yellow buttons' text swapped from white to black

 

Added keyboard support to the "Media type" Solr search facet.

Improved required rights reporting

The reporting presented by the required rights analyzer is now just a summary of the impacted rights first, with the possibility to expand the details. This is done to prevent showing technical items to users by default.

Simplified adding a logo to a Flamingo Theme

Adding a logo to a flamingo theme used to require you to first go into view mode on the theme page and attach the new logo image file before you would be able to see it in edit mode, as an option. Now, we have integrated the attachment selector so that you can upload and select a new logo image directly from edit mode, removing the extra steps. More details in the documentation.

Allow wiki macros to indicate the type of parameters

You can now specify the Java type of a wiki macro parameter. It used to not be possible and all wiki macro parameters were Strings.

New super secret developers shortcuts

We are now providing the following developer shortcuts:

  • The key sequence X, X, X, A toggles the "advanced user mode" for the currently logged in user. Performing this sequence as an advanced user will switch it back to the "simple user mode" (the default).
  • The key sequence X, X, X, H toggles the "show hidden pages" option for the currently logged in user. Performing this sequence while already viewing hidden pages will switch back to hiding hidden pages (the default).

Get the complete list of developer shortcuts here.

Attachment gallery picker scope selection toggle

The attachment gallery picker allows to define a search scope, either the current page only, or all viewable pages. In addition, a warning is displayed to the user when the selected attachment is not from the current page.

Emoji Support Enabled in WYSIWYG Editor

You can now insert emoji from the WYSIWYG editor using the dedicated toolbar button. This is done using the Emoji CKEditor Plugin. See the CKEditor Integration for more information.

Attachments are not loaded in memory anymore when imported

The XAR input filter used to load an entire attachment in memory before sending it to the Instance output. It's now stored in a temporary file before being sent as an InputStream.

Method selection improvement in Velocity

When standard Velocity cannot match a method call, XWiki try to find a close approximation that could be called provided the arguments are converted. The only criteria to select a suitable method used to be to count the number of arguments, but the order in which methods with the same number of arguments were tried was pretty much random. This leaded sometime to either hard to call methods or random results. This has been greatly improved to have more advanced ordering (taking into account already compatible arguments, etc.), see Velocity Module for more details.

Content menu usability improvements

We've had various reports that people new to XWiki were struggling to find the content menu (edit, create, etc.) so after some discussions, we've decided to try to make it a bit clearer and user-friendly.
The main changes include:

  • adding labels and backgrounds to each menu button to make it clearer that users could/should interact with them
  • merging the 2 action menus into a single one ("More Actions") to address issues with understanding what is the difference between them and also the "fear of the cog" icon, which was confusing some users.

Live Data async actions

It is now possible to allow a Live Data actions to be asynchronous. Instead of following the link, the action will be performed in the background, and the Live Data refreshed at the end of the process.
Additionally, it is possible to define a user confirmation before performing the action.

Example:

{{liveData
  id="test"
  properties="name,_actions"
  source="liveTable"  sourceParameters="className=Space.MyClass"
}}{
  "meta": {
    "actions": [{
        "id": "delete",
        "async": {
          "httpMethod": "POST",
          "loadingMessage": "Loading",
          "successMessage": "Delete Success",
          "failureMessage": "Failed",
          "body": "newBacklinkTarget=&updateLinks=false&autoRedirect=false&form_token=${services.csrf.token}&confirm=1&async=true",
          "headers": {
            "Content-Type": "application/x-www-form-urlencoded"
          }
        }
      }]
  }
}
{{/liveData}}

Allow to define the pool size of a GroupedJob

It is now possible to configure the pool of threads to be used for grouped jobs. To provide that configuration you need to declare a new component that implements org.xwiki.job.GroupedJobInitializer and whose method getId matches the JobGroupPath of the GroupedJob. You will be able to define the size of the pool of threads to be used for those jobs and the default priority of the threads. 

Note that the hierarchy of the JobGroupPath can be used to define the same configuration for a whole hierarchy of GroupedJobs.

New global configurations have been also added in xwiki.properties related to this feature:


#-# [Since 12.5RC1]
#-# The maximum number of entries to put in cache for the GroupedJobInitializer components.
#-# The default is 100.
# job.groupedJobInitializerCacheSize=100

#-# [Since 12.5RC1]
#-# The thread keep-alive time in milliseconds for the single job executor.
#-# This value defines how long a thread can be idle before being terminated by the executor.
#-# The default value is 60000 for 60 000ms.
# job.singleJobThreadKeepAliveTime=60000

#-# [Since 12.5RC1]
#-# The thread keep-alive time in milliseconds for the grouped job executors.
#-# This value defines how long a thread can be idle before being terminated by an executor.
#-# The default value is 60000 for 60 000ms.
# job.groupedJobThreadKeepAliveTime=60000

Default Notifications

In the global settings, administrators can select which applications and/or event types should be enabled by default for all users. The user can then override the default settings, but if he/she doesn't set anything, the preferences of the wiki where he/she belongs to are applied.

The inheritance is "Main Wiki preferences < Current Wiki preferences < User preferences".

Inline editing of title for Box Macro

The title of the Box macro is now editable directly in the WYSIWYG editor, as it already was for its content.

Solr dedicated core improvements

  • The base schema now provide a type "text_general" and associated helpers which follow the Solr standard "text_general" type, "a general text field that has reasonable, generic cross-language defaults: it tokenizes with StandardTokenizer, removes stop words from case-insensitive 'stopwords.txt' (empty by default), and down cases. At query time only, it also applies synonyms". This is the easiest way to insert full text search friendly fields in your schema.
  • A Solr core initializer can now decide if the data should be stored as cached data or not

Gadget Wizard Update

The Gadget Wizard used to insert and edit the gadgets from the Dashboard has been updated to use the new Macro Wizard from the CKEditor.

Allow to disable authentication security mechanism

In order to avoid any problem in the future with the Authentication Security that we recently introduced, we created a dedicated UI to easily disable/enable this mechanism. Note that disabling the authentication security will also clear the information about login failures, which might unlock users in case of problems.

Updated link underlining preference

The extra accessibility preference is removed, in favor of a more precise Link underlining preference. The link underlining can be set to three values:

  • Yes: all links are underlined
  • Only inline links: Only links in text blocks are underlined. This is the new default value. This is a compromise that allows to easily spot links in blocks of text without highlighting them in places where they are easy to see.
  • No: No links are underlined. This is equivalent to the previous default value.

Note that on hover, links are always underlined, independently of the underline setting.

The screenshots display a page with the different preferences selected, in the same order as the one described above.

Notification Filters

When configuring Notifications, it is now possible to control the locations you are interested in. This allows to limit the number of Notifications you receive or only receive specific ones. For example you can decide to receive Notifications when Comments are created but only on the Blog page and its children.

Typed custom event properties

Stream events support custom parameters since the new store implementation, but it was only strings. The old "parameter" related APIs have been renamed to "custom" APIs to support any Object as value. The standard store implementation natively support String, all Numbers, Boolean, Date, byte[] and any Iterable or array of the other types (anything else is converted to String). See Event Stream Module for more details about stream events.

Realtime WYSIWYG Source button

When using Realtime WYSIWYG Editing, editing and viewing the source wiki syntax is now possible by clicking the Source button in the toolbar.

When editing the source wiki syntax, the realtime editing session is interrupted temporarily. Once the user is done editing the source wiki syntax, the editor re-joins the realtime editing session automatically if it is safe to do so.
If the user wants to re-join the realtime editing session anyway, they can click the "Allow Realtime" Checkbox.

Async Rendering improvements

When the context document is selected in an asynchronous rendering execution it's also added to "used" entities. That means that if that document is modified the cache result will be invalidated automatically. 

Priority between Notification Filters

Notifications Filter has now a getPriority() method, to handle advanced use-cases when a filter needs to have priority over some others.

The "Supported Languages" setting is now hidden when the wiki is not multilingual.

Jobs improvements

  • The JobStatus now indicates the job type. There is nothing to do for Job extending AbstractJob but other will have to properly support it in the their JobStatus.
  • The Job REST API now automatically injects context information (current user, current caller, current wiki, current document, current secure document, the request URL and parameters) in the job thread.

Wiki Macro priority

It's now possible to define the priority of a wiki macro (it used to only be possible for Java Macros). This is useful when you need your macro to be executed before or after other macros. When not specified the default priority is 1000.

Hints for class properties

It is now possible, for developers, to add an hint in a class property. Then this hint is displayed in the object editor.

Upload summary

When upload summaries are enabled by the administrator, descriptions can be added to attachment uploads and will be displayed on the revision history of the attachment.

Inline editing of macro parameters

It is now possible to allow inline editing of macro parameters when using the WYSIWYG editor. In order to do that, we reuse the same principle as for allowing inline editing of content in macro: you have to specify the type of the macro parameter by using @PropertyDisplayType on the parameter, and then you have to specify the metadata to put where the macro parameter is used in the UI, by using the AbstractMacro#getNonGeneratedContentMetaData("parameterName") method.

Extension Manager improvements

  • new API in ExtensionManagerConfiguration to get a recommended version for a passed Extension id
  • various optimizations
    • speed resolve when the range contains only one version (don't ask all versions anymore)
    • better merge of version constraint ranges to only keep most specific ranges

The Event Stream can now send events

The Event Stream now sends EventStreamAddedEvent and EventStreamDeletedEvent events when an event is added or removed from the Event Stream. You can find more informations in the Event Stream documentation.

Async Rendering improvements

  • Saving/restoring the context action is now supported.
  • When saving the context document but not the wiki, the context wiki should be restored from the document.

Link to in-place editor

You can now create a link to open a page directly in in-place editing mode, provided in-place editing is enabled:

You can [[edit in-place>>Some.Page||anchor="edit"]] this page.

You can also output a link to create a missing page translation in-place:

You can [[translate in-place>>Some.Page||anchor="translate"]] this page.

The Information tab uses this, for instance, to link to the missing page translations, when in-place editing is enabled.

Improved Display of What's New

The display of the What's New Application has been improved to allow an easier differentiation between the different news items and better accessibility.

Choose the authentication service at runtime

It's now possible to choose the authentication service to use at runtime (for authenticators which support it).

Inline editing of wikimacro parameters

It is now possible to use a dedicated macro to output a wikimacro parameter so that it can be edited inline from the WYSIWYG editor.

You can use for instance the following macro code:

Here's the value of my macro parameter **foo**:

{{wikimacroparameter name="foo" /}}

The value of the macro parameter will be displayed and will be editable inline from the WYSIWYG editor.

New tags right check strategy configuration

It is now possible to configure the algorithm used when checking view rights on tags (returned by the Tags API) by editing xwiki.properties.

#-# [Since 14.4.8, 14.10.4, 15.0RC1]
#-# Configure the tag selection algorithm to use.
#-# The default algorithm is "exhaustive", which check all elements (documents and tags) for view right before returning
#-# them. This exhaustive check can lead to tag clouds and tag lists being slow to compute on instances with very large 
#-# amounts of tags or tagged documents (more than 5000 of elements).   
#-# Note that it is advised to keep using the default implementation as much as possible, and to switch to the "unsafe"
#-# option only when all performance improvements options have been exhausted 
#-# (see https://www.xwiki.org/xwiki/bin/view/Documentation/AdminGuide/Performances/)
#-# The "unsafe" algorithm does not perform any right checks. It is approximately 10 times faster than "exhaustive"
#-# but does not provide any guarantee that the current user won't be able to view a tag he/she is not allowed to. 
#-# Therefore, we cannot recommend to use it unless tags performance is critical AND tags and document references are 
#-# not considered as critical information.
# tag.rightCheckStrategy.hint=exhaustive
# tag.rightCheckStrategy.hint=unsafe

XAR export improvement

A new version of the XAR format has been introduced to improve the way attachment history is exported:

  • it's streamable (exporting an attachment history used to require a lot of memory)
  • version with identical content are de-duplicated (for example the history contain the current version so with the old format it's stored in both the current version and the history)

This new format is used by default to store deleted documents but not yet in the XAR export administration, should be enabled in 12.0 final.

REST API now supports the use of minor revision for page changes

Add ?minorRevision=true to your REST calls and the page will be updated with minor revision. See the whole documentation for the REST API.

Like feature disabling

It is now possible to disable the Like feature from the administration. Disabling it will preserve any existing Like data but hide them from the UI.

Solr search without programming right

It's now possible to do Solr request without programming right. In such a case the result will be filtered based on current script author right.

Versioning Store API improvements

The Versioning Store interface now exposes two new methods designed to directly fetch subsets of revisions:

Collection<Version> getXWikiDocVersions(XWikiDocument doc, RevisionCriteria criteria, XWikiContext context) throws XWikiException
long getXWikiDocVersionsCount(XWikiDocument doc, RevisionCriteria criteria, XWikiContext context) throws XWikiException

If you maintain a custom implementation of a Versioning Store, there should be no breaking change since these methods have default implementations. However, you are still encouraged to implement them to improve performances.

Consequently, the Document API now offers a method to directly obtain the number of existing revisions, fetching the information directly from the Versioning Store without actually loading the revisions:

#set ($criteria = $xwiki.criteriaService.revisionCriteriaFactory.createRevisionCriteria($author, $period, $includeMinorVersions))
#set ($revisionsCount = $doc.getRevisionsCount($criteria))

Operations that required to load the complete history of a document before filtering the revisions (e.g., displaying a paginated document history) have been modified to benefit from these changes, they should now be faster and use less memory.

User Picker Velocity Macro Changes

The #userPicker Velocity macro has been modified to have a compact display. There is no toggle to switch between local and global suggestions as the picker retrieves suggestions from both the current wiki and the main wiki depending on the current wiki's user scope. You can overwrite this if you want using the data-userScope parameter.

#set ($userPickerParameters = {
  'id': 'wikiOwner',
  'name': 'owner',
  'value': $descriptor.ownerId,
  'data-userScope': 'GLOBAL_ONLY'
})
#set ($multipleSelection = false)
#userPicker($multipleSelection $userPickerParameters)

The JavaScript library used to fetch the suggestions and to display them has been replaced, causing modifications to the HTML structure of the user picker. This means that you may have to update your code in case you did customizations on top of the old library. The new library we use is selectize.js.

Add a new binding for wikimacro

A new binding has been introduced for Wikimacro, the different information of the wikimacro are then available through wikimacro. The old binding xcontext.macro remains but is considered as deprecated and shouldn't be used anymore.

One important change in this binding concerns the parameters: those are now available through wikimacro.parameters.xxx (instead of xcontext.macro.params.xxx), and their values are now automatically converted to the type given in the WikiMacroParameterClass. 

Use LibreOffice with a pool of process

The Office Importer Application configuration has changed to allow using a pool of process in case of internally managed office server.

The property openoffice.serverPort is deprecated in favor of openoffice.serverPorts which takes a list of ports: each port will be use to start a dedicated office process. This will allow to use the process in parallel and avoid blocking users when several operations involving office are performed at the same time (imports and exports).

UI Extension Point for Document Extra Tabs

A new UI extension point has been added, allowing to insert a new tab at the bottom of a document. The parameters of this UIXP allow to specify the title of the tab, a number to show next to the title, and the order of the tab.

Document Tree Improvements

The tree now displays the rendered translated page title when the showDocumentTitle parameter is set to true, which is the default value. So the document tree is now taking into account the current locale when displaying the page titles. Moreover, the child pages are now sorted by their raw translated title, with a fall-back on the raw default title and then on the page name (if the raw titles are empty). Note that the rendered title may be different than the raw title if the title is dynamic (i.e. has Velocity code) so the child pages may not be sorted correctly if some have dynamic titles. The child pages are sorted by their name when the showDocumentTitle parameter is set to false.

The support for relative references in the root and openTo parameters has been improved. You still need to prefix the entity reference with its entity type though.

{{documentTree root="document:Alice" openTo="document:Bob" /}}

The behavior of the limit parameter has changed a bit: if there is only one child node remaining the "more ..." link is replaced by that child node, instead of displaying "one more".

The child nodes should be loaded much faster now as we refactored and improved the database queries used under the hood.

Ability to filter the page types

When you create a new page, you have to chose the type in a lot of them. To help you to pick the one you want, you can now filter them thanks to a text input.

Content Menu UIXP

You are now able to contribute new content menu buttons, in addition to the existing Edit, Add, Admin and More Actions by implementing the org.xwiki.plaftorm.menu.content UI Extension Point and specifying the order.

The Notifications Macro now includes a RSS view

Compact User Picker

The List of Users and List of Groups class properties have a new compact display that shows in view mode the user / group avatar followed by the user / group name. In edit mode the selected users / groups are shown in-line. Suggestions are retrieved from both the current wiki and the main wiki, depending on the current wiki's user scope (there's no toggle to switch between local and global users anymore). See the Data Model documentation for more information. This is the same user picker that has been already integrated in the Live Table user filter.

The compact user picker has been integrated in other places such as Administration, App Within Minutes, Wiki Application, Message Sender, Solr Search user facet and Share Page.

See your own activity in notifications

It's now possible to see your own activity in the notifications (either in the "alert" menu or in the emails). By default, your activity is hidden, but you have the ability to disable this filter in the "advanced filtering options" section of your notification settings.

Automatic validation and encryption keys

The validation and encryption key configured in the xwiki.cfg file and used for cookies don't need to be set anymore. When not set (the default now) they are automatically generated and stored.

Template Provider Improvements

We have improved the template provider edit form:

  • Both the creation and the visibility restrictions are now using a location picker. When you click on the "+" icon a popup appears with the page tree from where you can select one or multiple locations.
  • The icon field is now using an icon picker.
  • We rearranged the fields in order to better fill the available space. The left column contains visibility / display options, while the right column contains creation options.
  • We added more hints and improved some of the field labels.

See the Template Provider documentation for more information.

User Properties

There's now an API to modify user properties. Scripting example:

{{velocity}}
#set ($props = $services.user.getProperties("testuser"))
#set ($discard = $props.setEmail('[email protected]'))
#set ($discard = $props.setFirstName('John'))
#set ($discard = $props.save())
{{/velocity}}

Replace Jobs with threads to handle mentions asynchronously

The user mention analysis, to detect new mentions and send notifications to target users, is now done by a pool of threads.

Configuration

A configuration option to define the size of the thread pool is available in xwiki.properties.

#-# [Since 12.6]
#-# The detection and notification for the user mentions in created or edited content is done asynchronously
#-# by a pool of consumers.
#-# This properties controls the size of this pool.
#-#
#-# The default is :
# mentions.poolSize = 1

JMX Monitoring

An object named org.xwiki:name=mentions is provided and provides two attributes and one operation:

  • QueueSize: Displays the number of elements (created or updated pages) to be analysed.
  • ThreadNumber:  The number the threads in the thread pool.
  • clearQueue(): Removes all the elements in the queue. Warning: By doing so some pages will not be analysed and some mentions will be missed. To be used carefully.

 

Locale (Language) Picker

The locale (language) picker that is used in the Localization administration section has been converted to a generic picker that you can reuse.

Image Captions

The XWiki 2.0 and 2.1 syntax now supports captioned images. The syntax:

[[Caption content>>image:some_image.png]]

is rendered as an image with "Caption content" as caption when the image is alone in a paragraph (e.g. the image syntax is surrounded by blank lines). The caption content supports full XWiki syntax. If you want to use nested links you need to escape the link syntax with a single escape character. For instance, the following syntax:

[[~[~[xwiki.org~>~>https://www.xwiki.org~]~]>>image:some_image.png]]

generates an image with a link to xwiki.org in the caption.

Image captions are also supported in the WYSIWYG editor. In the image dialog the checkbox "Captioned image" can be used to add/remove the caption of an image. The caption can be edited directly below the image.

Shortcuts are now handled by the Keypress JS library

We now handle keyboard shortcuts using the Keypress JS library.

The old API for declaring and managing shortcuts has been kept (XWiki.shortcuts). However, some parameters such as propagate or type are now handled differently.

Please refer to the API to learn more.

After document header extension point

It is now possible to inject some content after the document header, that is below the title / update info / actions block, by implementing the org.xwiki.platform.content.header.after UI Extension Point.

Create a job to delete all from the recycle bin

It is now possible to create a job for permanently delete elements from the recycle bin. It is supported in the Refactoring Script Service as explained in its documentation.

New administration section for Extension Rights

A new administration section has been introduced allowing to display and set the extension rights: those are rights that some specific extensions might provide, and which are not part of the core rights. By default in XWiki Standard, the Like Right is displayed in there since it's part of the Like extension which is automatically installed.

PDF Export Metadata

The PDF export template has a new field named "Metadata" that you can use to display additional information about the exported wiki pages in the PDF header or footer. You need to follow three steps:

  • Use the Metadata field to indicate the extra information you want to display. For instance, if you want to display the tags:
    {{velocity output="false"}}
    $metadata.putAll({
      'data-tags': $stringtool.join($doc.getTagList(), ', ')
    })
    {{/velocity}}
  • Use the Header or Footer fields to indicate where to display the metadata:
    {{html clean="false"}}
    Tags: <span class="pdf-doc-tags"></span>
    {{/html}}
  • Use the Style Sheet Extension object to inject the metadata in the PDF header or footer:
    h1[data-xwiki-document-reference] {
     string-set: doc-tags attr(data-tags);
    }
    .pdf-doc-tags:before {
     content: string(doc-tags);
    }

See the PDF Export Application documentation for more information.

Allow to display ConfigurableClass in all administration pages

The ConfigurableClass has been refactored to use a new scope property for defining where it should be configured. This property can take 4 different values:

  • WIKI (displayed Wiki): the configuration will be displayed in the wiki administration (equivalent to true value in configureGlobally for older versions)
  • SPACE (displayed "Current space"): the configuration will be displayed in administration of pages that belongs to the current space (equivalent to false value in configureGlobally for older versions)
  • ALL_SPACES (displayed "All spaces"): the configuration will be displayed on administration of pages for any space, but not on the wiki administration. 
  • WIKI+ALL_SPACES (displayed "Wiki and all spaces"): the configuration will be displayed in all administration pages, be it the wiki administration or any page administration. 

Note that the old configureGlobally property is still supported in the code handling the ConfigurableClass so no migration is needed for this change.

Attachment selector can use the temporary attachment store

When uploading an attachment using the attachment selector, and the attachment has savemode sets to form, new attachments are not saved directly on the document anymore.
Instead, the attachment is kept in a temporary attachment store and only persisted when the form containing the attachment selector is saved.
Temporary attachments are presented with a clock icon (clock) when presented in the attachments selection modal.

Filer Stream improvements

Instance Filter output stream now support xobjects without class definition so input filters don't have to generate events for it. It automatically fallback on the xclass located in the current wiki.

Live Search in Administration

The administration menu now has a search input at the top that can be used to filter the administration categories and sections. At the moment the live search matches only the category/section name and description.

Searching inside Extensions

It's now possible to expose some Components found in Extensions so that they can be queried by the Extension Manager and shown in the extension details. You can now search in the Extension Manager for all Extensions providing some type of Components (Macros, Script Services, Syntax Parsers, Syntax Renderers, etc). For example, you can use component_macro:* to search for all Extensions providing Rendering Macros.

Like information are displayed in a live table

People liking a page are now displayed in a live table.

Propertly support long paths in filesystem store

The way the filesystem store organizes the data has been completely modified to fix a bug with some languages. There should not be any issue with the size of the path anymore.

Configure Syntaxes

It's now possible to easily configure the markup syntaxes that you wish to be made available to your users when writing pages, directly from the Admin UI.
More details

New Async macro

A new Async macro was introduce to make easy to execute asynchronous and/or cached wiki content. See Async Macro for more details.

Filesystem store improvements has changed format

Support for case insensitive filesystems has been added in the filesystem store. Among other things it means that most of the existing paths need to be modified (upper case characters are now escaped). There is an automatic migration for it but be careful if you are using some custom tool manipulating directly the store files (since the format has changed).

Default values in User Preferences

When you go to your user profile in order to changes your preferences, you now see better what are the default values (both in view and edit modes).

Recommended versions

It's now possible in the build or in the xwiki.properties file to indicate a set of extension for which you want to use a specific version when they are installed as dependencies. By default all commons/rendering/platform extension have a recommended version synchronized with the version of the distribution or XWiki you installed.

Translate Page Button

A new Translate button is now visible when viewing a page, if the wiki is multilingual and the page has not been translated to the current user interface locale. This button allows you to create the missing translation. It opens the in-place editor or it takes you to the stand-alone editor (Wiki or WYSIWYG) depending on your preferences. See the Internationalization documentation for more information.

Provide a new API for Ratings

The Ratings API has been rewritten in order to support new use-cases, such as performing rates on different kinds of elements (not only pages) but also using different scales for ratings. This works leads to breaking the existing Ratings API: the Rating Application is automatically supported (you just have to update the extension) but if you used directly the Ratings API for some custom extensions you might be interested about this small guide for migrating it.

Mention summary on the notification

A summary of the text surrounding a mention can now be displayed in the notification UI for mentions.

The generation and display of the mention summary can be disabled in the mentions section of the administration.

No summary is computed when this feature is turned off. Consequently, even if the feature is turned on again, no summary will be displayed for previously send notifications.

Translate page while editing in-place

If multilingual is on and the current page is not translated in the current user interface language then editing in-place will load the original page. If you wish to translate the page then you just need to click on the Translate button. Whatever changes you do next will be saved to the translated page.

Filesystem attachment improvements

A few of the long standing issues in the filesystem attachments storage have been fixed:

  • Deleted attachments are now available on the "Deleted Attachments" tab of the Page Index
  • The attachment porter script is not needed anymore (XWiki supports mixed attachment storage which means database attachment will stay in the database and keep working after changing the default store)
  • Various other bugfixes

Ability to set the default auto watch mode in the administration

It is now possible, for administrators, to set the default auto watch page behavior.

Default object sheet supports in-place editing

If you create a new application on top of XWiki following the manual FAQ tutorial you'll notice that starting with this version the application entries are editable in-place, from view mode. You can achieve the same thing for an existing application by copying and adjusting the code of the XWiki.ObjectSheet page over your existing sheet. Just make sure you update the name of the class used in the copied code.

Localization Section

It's now easier to pick a time zone or a language in the "Localization" section of the Administration, thanks to a filter box.

Increased timeout for Office

The default timeout to import office documents has been increased for 30 seconds to 1 minute, in order to avoid errors when importing large documents taking more than 30 seconds.

Refactoring for references in macros

When a page is moved or renamed, the link and image references located inside inline-editable macros are now updated as well.

Added keyboard support for the quick search suggestions.

Macro Content Prefill in WYSIWYG Editor

When inserting a macro, the macro content text area is prefilled with the text selected within the editing area. This means you can for instance transform a paragraph into an error message by selecting the paragraph text, click the Insert Macro button from the tool bar, select the Error Message macro and insert it. Checkout the CKEditor Integration documentation for more information.

Attachment Icons use the Icon Theme

The attachment icons displayed on the attachments tab at the bottom of the page is now using the configured Icon Theme.

MariaDB Debian package

A new MariaDB-oriented Debian package has been introduced.

Author Executor

It's now easier to execute code with a different author. Author is used to check SCRIPT and PROGRAMMING right. Example:

this.authorExecutor.call(this.renderer::execute, getAuthorReference());

Extension Repository adds recommendations

The Extension Repository Application now supports the optional feature of being able to mark some Extensions as Recommended. This provides some form of curation and separate "good" Extensions from others. The need arises when there are lots of Extensions. 

The screenshots show:

  • The view when the Recommendation feature is turned on
  • How a Recommended Extension is displayed with a badge showing it's Recommended

Updated the notification count color to match the color theme. This should on a light color theme make this red darker.

Macro Parameter Pickers

The WYSIWYG editor is now able to load pickers for macro parameters based on their type. The binding between macro parameter types and the associated pickers is done on the server side (check the templates/html_displayer folder inside the XWiki WAR). For instance, if you have a wiki-based rendering macro, you can set the type of a macro parameter to "org.xwiki.model.reference.DocumentReference" in order to get a document picker when inserting or editing your macro from the WYSIWYG editor. Check the CKEditor Integration documentation for more information.

New API for in-page component instantiation

The Wiki Component API offers a new interface called WikiObjectComponentBuilder that allows to instantiate new components using defined XObjects. For more informations, see the Wiki Component API documentation

Live macro rendering when editing in-place

The new in-place edit mode runs the JavaScript code required by rendering macros, producing a true WYSIWYG editing experience.

New XObject type for in-page event definition

Custom events can now be defined directly in wiki pages through XObjects ; more information about this feature can be found in the Event Stream Module documentation.

CKeditor Image Gallery Picker

The new Attachment Gallery Picker Macro is integrated in the new CKEditor Image Dialog. That way, images can be searched by keyword and can be previewed before selection.

Attachments Page from the Index now use a Live Data

The Attachments page displayed in the Index now use a Live Data instead of a Live Table for displaying the information.

Support for Live Data in Velocity

It is now possible to insert a Live Data using scripting instead of using the usual liveData macro.

Example using Velocity:

$services.liveData.render({
 'id': 'users',
 'properties': '_avatar,doc.name,first_name,last_name',
 'source': 'liveTable',
 'sourceParameters': 'className=XWiki.XWikiUsers&translationPrefix=xe.userdirectory.'
})

Code Macro Source

The code macro now have an alternative way to indicate the content to highlight, which allows highlighting a script value or the content of an entity stored in the XWiki database. See Code Macro for more details.

User Directory Configuration Live Preview

The User Directory configuration has a new setting to show/hide disabled users. Disabled users are hidden by default. The users live table is now updated automatically when the configuration is modified.

User membership in the profile

It's now possible to see the groups a user is member of in the profile. See User Profile Application.

Headings appearance

In order to make headings easier to ready, they are now bolder. In addition, the size difference between two adjacent levels is larger.

Option to skip the recycle bin

There's now an administration option to allow advanced users to choose whether deleted pages are sent to the recycle bin or not.

To do so, search for the "Delete" section in the Administration and set "can skip the recycle bin" to Yes. The default value is No to avoid unwanted loss of data.

 

Larger attachments by default

Till now the default limit for attachments was set at 32MB. It's now been increased to 100GB.

New HQL safe select columns

Some new allowed query select columns have been added:

  • XWikiDeletedDocument
    • id
    • fullname
    • language
  • DeletedAttachment
    • id
    • filename

Administration Improvements

The Administration has been reorganized. Most of the administration sections from the "Applications" group have been moved to existing or new groups. We applied a consistent style across all the administration sections and we added more hints for the configuration options. The administration menu is now implemented using a collapsible accordion. 

Jobs improvements

  • A framework has been introduced to make easier to write jobs UI with question/answer support. You can see more details in the Job Module documentation.
  • AbstractJobStatus now implement CancellableJobStatus interface which allow generic code to control jobs that can be canceled
  • it's now possible to get the time left before a job question timeout using newJobStatus#getQuestionTimeLeft method

Notification templates override through XObjects

A wiki administrator can now create custom NotificationDisplayerClass XObjects in order to override default templates used in the notifications tray. For more informations, please refer to the Notifications API documentation.

Context save/restore

New tools have been introduced to help save and restore contextual information. It's useful for example when transferring contextual information from one thread to another to execute asynchronous tasks. This is done trough org.xwiki.context.concurrent.ContextStoreManager.

It's possible to add support for more contextual information by implementing org.xwiki.context.concurrent.ContextStore components. See documentation for more details.

On Jobs side a new context property have been added to the org.xwiki.job.Request to automatically restored passed context data before executing the job.

Cross wiki refactoring of links by default

Cross wiki refactoring of links is now much faster (being in a different wiki does not anymore have any specific performance impact when refactoring links) and enabled by default.

Extension Manager improvements

Extensions installed as dependencies but which don't have any backward dependencies anymore are now taken into account by the upgrade job.

Java macros can have several categories

The java macros can have several categories. The deprecated setDefaultCategory is replaced by setDefaultCategories. For instance:

/**
* Create and initialize the descriptor of the macro.
*/

public ExampleMacro()
{

 super("Example", DESCRIPTION, ExampleMacroParameters.class);
  setDefaultCategories(java.util.Collections.singleton("Tutorial"));
}

Live Table Actions use the Icon Theme

The default Actions column from the Live Table is now using the configured Icon Theme for the action icons. See the Live Table macro documentation for more information.

Ability to redirect deleted page link to a new page

When deleting a page, users can now select, using a page picker, a new target to be used for updating links that where pointing to the deleted page.

To fix eventual broken external links (e.g. bookmarks, links from emails), they can also create an automatic redirect from the old location to the new target.

In addition, to support restoring a deleted page with an automatic redirect created (i.e. a page with the same name, but with a XWiki.RedirectClass added), a Replace action was added for the deleted pages. See Index Application Documentation.

Link document to corresponding extensions

A new set of scripting APIs have been introduced to link documents from the database to the corresponding installed extension.

Warning when Deleting Users with Script Right

Wiki administrators are now warned when they are about to delete users that have Script or Programming Rights, if there are pages that were last modified by these users. Check out the Administration Application documentation for more information.

What's New in XWiki

Displays news about XWiki and its ecosystem, directly into your XWiki instance.

Followed users in the user profile

A user can now see again (it was temporarily removed in past version while we migrated from WatchList to Notifications) the list of the users she is watching in the "network" panel of her user profile.

Default radius of UI elements

The default radius of UI elements of the Flamingo Skin are now larger (about 1.75 times larger) by default.

Translation fallback

It's now possible to pass a list of keys to test one by one until one is found. See Scripting for more details.

Ignore extension dependencies

It's now possible to force Extension Manager to ignore a set of dependencies that might cause problem or simply be useless. See Dependencies for more details.

Temporary Resource API

A new API is available to create temporary resources. Here's an example of how you can use it:

// (1) Create the temporary resource reference.
String moduleName = "chart";
List<String> resourcePath = Arrays.asList("pie", "issuesByReporter.png");
EntityReference owningEntityReference = new DocumentReference("wiki", Arrays.asList("Path", "To"), "Page");
TemporaryResourceReference temporaryResourceReference =
   new TemporaryResourceReference(moduleName, resourcePath, owningEntityReference);

// (2) Create the temporary file.
InputStream content = new ByteArrayInputStream("content".getBytes());
File tempFile = this.temporaryResourceStore.createTemporaryFile(temporaryResourceReference, content);

// (3) Obtain the URL that can be used to access the above temporary file.
String temporaryResourceURL =
   this.urlTemporaryResourceReferenceSerializer.serialize(temporaryResourceReference).serialize();

New CKEditor Image Dialog Improvements

The new CKEditor Image Dialog comes with two new tabs to select images. Users can now use the id of an icon, or use external URLs.
In addition, the image dimensions are now locked by default, and the ratio between the width and height of an images is preserved when one of them is changed.

Administration sections executed with the right author

The content of the administration sections used to be inserted as is into the general administration code forcing it to disable programming right to avoid dangerous code injection. Configuration section content is now executed with the right of its author and with all the rights of its author so not longer require display macro based hacks to workaround the previous limitation.

Figure macro type configuration

Is is now possible to manually set the type of a figure macro, instead of relying on the automatic type detection feature.

Confirmation before clearing notifications

Now a confirmation is asked before clearing all notifications.

Script Safe Provider

The old ScriptSafeProvider tool has been move to a public package. It's making much easier to make a script API safe by wrapping what it returns to make sure:

  • it really only can use the method exposed in the returned API
  • there is some protection added to the methods called in the returned objects
  • it's easy to make collection of those objects safe

See Script Module for more details.

Required rights enabled by default

The required rights check before editing is now enabled by default. It can still be disabled by changing the required rights configuration in case it is not desired or there should be any issues.

Ability to re-order items in the Applications Panel

It's now possible to re-order the items displayed in the Application Panel, in the administration.

Realtime Editing of Rendering Macros

The realtime WYSIWYG editor has changed the way it handles rendering macros. Previously, the macro output was propagated from the user that inserted or last modified the macro parameters to the other participants in the realtime session. This was working fine for static macros, that don't rely on custom CSS and JavaScript, but it was creating problems for dynamic macros (e.g. live data). Starting with this version, the macro output is not synchronized anymore between the users. When a user inserts a macro or modifies the parameters of an existing macro call, the other users will get their content re-rendered server side in order to get the updated macro output (which often depends on the current user, e.g. on their access rights). See the realtime WYSIWYG editor documentation for more information.

Targetable Events disregard Inclusive filters

We changed slightly the behaviour of Notification Filters for Targetable Events. These type of events are not concerned anymore by inclusive filters. It means that these events will be received by users even if the location where the event has been sent to is not watched by the user. This is useful for example for Mentions to allow receiving Mentions notifications from any location without needing to watch it.

Note that the exclusive filters are still honored by targetable events: this allows users to keep not receiving notifications on the chosen locations.

Realtime Communication (Netflux)

The new Netflux module provides support for real-time WebSocket-based communication in XWiki by offering:

  • a script service and a REST resource to help create and retrieve communication channels.
  • a WebSocket server end-point used to join channels and to exchange channel or direct user messages.

This can be used along with the Netflux Client to implement realtime-enabled extensions on top of XWiki (e.g. a chat application).

Not Found Suggestions

We have added suggestions for the "document not found" and "attachment not found" error screens. The suggestions address minor typos and misspelling (including lower case vs upper case), but also bad location requests.

Live email notifications

A user can now receive live notifications when some events are triggered in the wiki.
Depending on the platform configuration, when an event that should trigger a live notification is sent, the platform will wait X minutes before sending the notification email. If during this period, new events of the same kind are sent, they will be grouped in the same email. You can get more informations in the Notifications Application documentation.

New tags right check strategy configuration

It is now possible to configure the algorithm used when checking view rights on tags (returned by the Tags API) by editing xwiki.properties.

#-# [Since 14.4.8, 14.10.4, 15.0RC1]
#-# Configure the tag selection algorithm to use.
#-# The default algorithm is "exhaustive", which check all elements (documents and tags) for view right before returning
#-# them. This exhaustive check can lead to tag clouds and tag lists being slow to compute on instances with very large 
#-# amounts of tags or tagged documents (more than 5000 of elements).   
#-# Note that it is advised to keep using the default implementation as much as possible, and to switch to the "unsafe"
#-# option only when all performance improvements options have been exhausted 
#-# (see https://www.xwiki.org/xwiki/bin/view/Documentation/AdminGuide/Performances/)
#-# The "unsafe" algorithm does not perform any right checks. It is approximately 10 times faster than "exhaustive"
#-# but does not provide any guarantee that the current user won't be able to view a tag he/she is not allowed to. 
#-# Therefore, we cannot recommend to use it unless tags performance is critical AND tags and document references are 
#-# not considered as critical information.
# tag.rightCheckStrategy.hint=exhaustive
# tag.rightCheckStrategy.hint=unsafe

Template requirements

It's now possible to express, through template properties, requirements that must be met before the template is executed. By default, the possibility to express a requirement on the context action is supported but any extension can provide its own requirements types. See Template Module for more details.

Email notification default frequency

It is now possible to configure globally the default frequency used for email notifications, in the administration section of the Notification Application.

Allow IndexerJob to be triggered wiki per wiki on farms

Until now when the configuration solr.synchronizeAtStartup was set to true, the indexer job was trigger for the whole farm of wiki, which could have been resource consuming for the machine. We added a new configuration for the Solr Search API that allows to trigger the index job only when sub-wikis are starting (default behaviour now) or for the whole farm as it was done before. You can find the following configuration in xwiki.properties.

#-# [Since 12.5RC1]
#-# Indicates which wiki synchronization to perform when the "solr.synchronizeAtStartup" property is set to true.
#-# Two modes are available:
#-#   - WIKI: indicate that the synchronization is performed when each wiki is accessed for the first time.
#-#   - FARM: indicate that the synchronization is performed once for the full farm when XWiki is started.
#-# For large farms and in order to spread the machine's indexing load, the WIKI value is recommended, especially if
#-# some wikis are not used.
#-# The default is:
# solr.synchronizeAtStartupMode=FARM

This option default value changed between 12.5RC1 and 12.5. The default value was WIKI in 12.5RC1 and is now FARM since 12.5

The new CKEditor Image Dialog is now the default

The new CKEditor Image Dialog is now activated by default. On new instances, or when CKEditor.Config does not exists the change is automatic. Otherwise, activating the new image dialog must be done by removing xwiki-image from the disabled plugins list in the WYSIWYG Editor section of the Administration.

Addition of "panel-header-color"

Added a new parameter to the color theme, to control panel header text color. See the Flamingo Color Theme documentation.
More details

Rename/Move protection

As with the delete action, if you try to rename a page that belongs to an installed extension you will now get a warning suggesting you to uninstall the extension instead and asking you to explicitly select the standard pages you want to rename.

Note that the displayed message text is currently the same one as for delete but that will be fixed in the next version.

New script service for URL security operations

A new script service has been introduced to allow performing security checks on URL. The script service currently provides a single method which can be used like that:

{{velocity}}
#set ($myURL = "http://xwiki.org")
#set ($safeURI = $services.security.url.parseToSafeURI($myURL))
## The URI is null if not safe.
#if ($safeURI)
 ## use it as an URI object. 
#end
{{/velocity}}

Macro Parameter Groups

The WYSIWYG editor is now able to group macro parameters as indicated in the macro descriptor. Currently only the Include Macro has grouped parameters. There can be two types of macro parameter groups:

  • groups of related parameters (e.g. reference and type in the case of the Include Macro)
  • groups of alternative parameters (only one parameter in the group should be set); this type of groups are displayed using tabs (e.g. "Resource" and "Page" in the case of the Include Macro)

See the CKEditor Integration documentation for more information.

Extracted the $displayContentFooter layout variable from $displayDocExtra

A new $displayContentFooter layout variable is available to control the display of the section after the document content but before the docextra tabs; i.e. tags, creator and creation date.
Now, $displayDocExtra controls only the display of the docextra tabs, without affecting the content footer section, individualized above.

Improved Navigation Panel Administration

The Navigation Panel administration section has been improved with support for drag & drop. You can now drag pages from the navigation tree to exclude them and back to the tree to include them. See the Navigation Panel documentation for more information.

Grouping of similar Notifications

Similar notifications (for example a page has been updated by the same user several time in a row) are now grouped together and the details of all activities is displayed in the "details" section.

Export Formats Extension Point

A new UI extension point org.xwiki.platform.template.exportFormats is available to add export formats to the Export Modal. If you were using the old org.xwiki.plaftorm.menu.export.buttons extension point then we highly recommend updating your code to use this new extension point instead. Checkout the documentation for more information.

Macro content can be declared to be inline editable

Some part of the macro content can be declared as inline editable: the user will then be able to edit those parts of the content directly in the wysiwyg editor.

In order to make this available you need to specify 2 information when declaring the macro:

  1. the type of the macro content
  2. the parts of the macro that can be editable inline

Specify the type of the macro content

 

You need to specify it in the constructor of the DefaultContentDescriptor

public DefaultContentDescriptor(String description, boolean mandatory, Type type)

The type of a content which can be editable inline, is List<Block>.
In order to simplify its declaration, we created a constant that can be immediately used:

new DefaultContentDescriptor("Content of the message", true, Block.LIST_BLOCK_TYPE));

Specify the parts of the macro that can be editable inline

When declaring the result of the macro by overridding execute method, you can specify which parts of the macro will be editable inline, by specifying some metadata.

For example, if you want to declare a block containing a logo which is always the same and a block which will be editable inline you can specify it like that:

ResourceReference imageReference = // declare the reference to the image logo
Block logoBlock = new ImageBlock(imageReference, true);
List<Block> content = this.contentParser.parse(content, context, false, context.isInline()).getChildren(); // parse the existing content and get its children blocks
Block editableContent = new MetadataBlock(content, this.getNonGeneratedContentMetadata()); // specify the right metadata in order to make the content editable inline
return Arrays.asList(logoBlock, editableContent);

The obtained result for the rendering will look like:

<!--startmacro:myMacro|-||-|content-->
<span id="logo"><img src="mylogo.png" /></span>
<div data-xwiki-non-generated-content="java.util.List&lt; org.xwiki.rendering.block.Block &gt;" class="xwiki-metadata-container">
    <p>my editable content</p>
</div>
<!--stopmacro-->

The syntax used inside the editable part can be declared by using a syntax metadata. 

Consider that nested macro will be editable inline, only if they also declare an editable content. On the same idea, if a nested macro declare an editable content, it can be used only if the parent macro also declare an editable content.

Please note that between 10.10RC1 and 10.10 the metadata changed its name.
So with 10.10RC1, in the above snippets you should replace the method getNonGeneratedContentMetadata by getUnchangedContentMetadata, and the html attribute data-xwiki-non-generated-content by data-xwiki-unchanged-content.

Translation Messages in JavaScript

We added support for using translation messages in JavaScript without relying on Velocity code. This has the big advantage that the JavaScript code can be cached without the need to invalidate the cache when the current locale changes. Here's how you can do it:

// First you need to define a module that holds the required translation keys.
define('my-translation-keys', {
  prefix: 'livedata.',
  keys: [
   "dropdownMenu.title",
   "selection.infoBar.allSelectedBut"
  ]
});

// Then you require the translation messages using the dedicated loader.
require(['xwiki-l10n!my-translation-keys'], function(l10n) {
 // Translation key without parameters.
 console.log(l10n['dropdownMenu.title']);

 // Translation key with parameters.
 console.log(l10n.get('selection.infoBar.allSelectedBut', 'parameter value'));
});

See the Localization Module documentation for more information on this topic.

Live storage of job log

The log of the job is now stored on the filesystem next to the statux.xml in live:

  • very low memory footprint
  • it's possible to see the log even of the status is not yet serialized

User Mentions API upgraded

The User Mentions API has been upgraded to support new use-cases, such as sending notification to different kind of actors. This new API is a first step toward the mention of users from remote wikis, or to the mention of groups. A new event has also been introduced, making it easier to listen and react to mentions from new modules.

Blog Post Template

You now have the option to create a blog post from anywhere inside the Blog page (or one of its children) by simply using the + (create page) button and selecting Blog Post as your new page's type

The server is now able to check for its new versions

The server can now check if a new version of its distribution is available but this feature is not active by default and the information about new versions are not displayed anywhere yet. In the near future, we'll add a new notification visible to administrators when a new version is found.

The version check can be enabled through the parameter extension.versioncheck.environment.enabled in xwiki.properties.

Default empty choice for list properties

In the default list property editor an empty choice (generally displayed as "---" but it can be translated) is now always added for non multi select based editing. This avoid hacks like the "---" value which used to be used in various XWikiPreferences properties choices.

Support for Live Data description

The Live Data macro has a description parameter, allowing to define a textual description of the content of the Live Data.

Example:

{{liveData
  id="users"
  properties="_avatar,doc.name,first_name,last_name"
  source="liveTable"
  sourceParameters="className=XWiki.XWikiUsers&translationPrefix=xe.userdirectory."
  description="The list of all users:"
/}}

Improved Suggest Input for Database List Properties

The edit mode display for Database List properties that have "input" display type and "Use suggest" enabled in their definition has been improved by integrating selectize.js. The new widget handles both single selection and multiple selection properties. See the XWiki Data Model for more information on class properties.

New CKEditor Image Dialog Improvements

The new CKEditor Image Dialog comes with two new tabs to select images. Users can now use the id of an icon, or use external URLs.
In addition, the image dimensions are now locked by default, and the ratio between the width and height of an images is preserved when one of them is changed.

Global Color Themes

It's now possible, on a subwiki, to use a color theme coming from the main wiki (global themes).

New RSS feed for Notifications

It is now possible to get the notifications occurring on a farm through a RSS feed. The user can access their RSS feeds through two links in the notifications center and in the notifications tray.

Fine-grained control over how Chrome accesses XWiki

The "XWiki Host" PDF Export configuration parameter has been replaced by a new configuration parameter named "XWiki URI". While the old parameter was used to specify only the domain name or IP address of XWiki (required by the headless Chrome web browser to open the print preview page) the new parameter allows you to specify additionally the scheme (e.g. HTTP versus HTTPS) and the port number (e.g. 8080). This makes it easier to configure the remote Chrome so that it bypasses the proxy (e.g. SSO) in front of XWiki (e.g. by accessing directly the servlet engine that runs XWiki, such as Tomcat).

Note that the old "XWiki Host" configuration parameter is still taken into account (e.g. if it was set before upgrading to XWiki 15.7+) but the new "XWiki URI" parameter takes precedence (when set). We recommend updating your configuration to use the new parameter (in case you're using a remote Chrome and not the user's browser for PDF export). Migration is easy: just copy the value from the old parameter to the new one. This is possible because the scheme and port number are optional when specifying the "XWiki URI".

For more information checkout the PDF Export Application documentation.

Added keyboard support for the "more page action" dropdown.

The identity of the current user is now available in javascript

JavaScript developers can now get the reference of the current user thanks to the xwiki-meta module that you can use like this:

require(['xwiki-meta'], function (xm) {
  console.log('Hello: ' + XWiki.Model.serialize(xm.userReference));
 // Will display "Hello xwiki:XWiki.Admin" in the console
});

UIXP to publish RequireJS modules

We added a new UIXP to support extending the global RequireJS configuration. This allows you to publish a RequireJS module that others can use without knowing its path.

Improved Date Filter

The look & feel of the live table date filter has been improved. You can check it on the Page Index.

External URL generation improvements

It's now possible to set the port to use when generating an URL for a wiki in the each wiki descriptor. When the port is not set for a wiki, XWiki fallback on the main wiki descriptor.

Subwiki secure property (which indicate if HTTPS should be used instead of HTTP when generating a URL for the wiki) now inherit main wiki value if not explicitly set.

The first time XWiki is accessed the main wiki descriptor is generated using what can be found in the request's URL. For example if you access your wiki using https:mydomain:9898/xwiki/ you will end up with the following main wiki descriptor:

  • alias: mydomain
  • secure: true
  • port: 9898

Also XWiki now supports the Forwarded (RFC7239) standard HTTP header when extracting information from the URL used by the client.

Ckeditor Macro Dialog filters by categories

The CKEditor Macros dialog now allows to filter by several categories. In addition, all the listed macros are now displaying their categories.

In addition, macros with an hidden category are not displayed to users who have Display hidden pages set to False in their preferences. Hidden macros categories are Deprecated and Internal by default, and can be configured by Admins since 14.8+.

The "network" tab is back in the user profile

The "network" tab disappeared in XWiki 10.3 for technical reasons. Thanks to the new Notifications Macro, it comes back in XWiki 10.4. It's also better than before since it now allows dismissing events.

The goal of this tab is to display all the events performed by the users you are following.

Escaping of XWiki macro syntax in XML

The character { is now escaped in org.xwiki.xml.XMLUtils#escapeElementText and Document#display APIs.

Set the default level of details for the notification emails

The administrator can decide what is the default value when the users don't touch their settings. The following screen is available in the "Notifications" section in the Administration.

In-place section editing

You can now edit in-place the sections of a plain wiki page, if the WYSIWYG editor is the preferred content editor. Unlike the old section editing, this allows you to edit the entire page, so that you don't loose the context, but it places the focus in the right section so that you don't have to scroll the page.

New source support for content and context macros

The content and context macros now have an alternative way to indicate the content to parse, which allows executing content coming from a script value. See Content Macro for more details.

Notification email details

It's now possible to configure what kind of information is displayed in the "details" section of the notification emails. Currently, there are 2 levels:

  • None, if you don't want to see change details and only get links to changes
  • Standard to display the change details as diffs.

HTML Diff Script Service

A new script service is available to compute the visual changes between two HTML fragments:

<div class="html-diff">
  #set ($htmlDiff = $services.diff.html.unified($previousHTML, $nextHTML))
  #if ($htmlDiff == '')
    No changes.
  #elseif ("$!htmlDiff" == '')
    Failed to compute the changes.
  #else
    $htmlDiff
  #end
</div>

Checkout the Diff Module's documentation for more information.

Auto Notifications on changes

Thanks to an improvement to the AutoWatch feature of the notifications, users now get notified on changes done to pages they previously edited.

Date Script Services

A new script service called $services.date is now available. It currently implements the "time ago" displays (such as "12 minutes ago") and it support a lot of locales. See: Date Script Service.

Wiki initialization

Like the main wiki, sub wikis now have asynchronous initialization. This reduce a lot the chance that one or several initializing wikis end up eating all the farm input threads.

New tags right check strategy configuration

It is now possible to configure the algorithm used when checking view rights on tags (returned by the Tags API) by editing xwiki.properties.

#-# [Since 14.4.8, 14.10.4, 15.0RC1]
#-# Configure the tag selection algorithm to use.
#-# The default algorithm is "exhaustive", which check all elements (documents and tags) for view right before returning
#-# them. This exhaustive check can lead to tag clouds and tag lists being slow to compute on instances with very large 
#-# amounts of tags or tagged documents (more than 5000 of elements).   
#-# Note that it is advised to keep using the default implementation as much as possible, and to switch to the "unsafe"
#-# option only when all performance improvements options have been exhausted 
#-# (see https://www.xwiki.org/xwiki/bin/view/Documentation/AdminGuide/Performances/)
#-# The "unsafe" algorithm does not perform any right checks. It is approximately 10 times faster than "exhaustive"
#-# but does not provide any guarantee that the current user won't be able to view a tag he/she is not allowed to. 
#-# Therefore, we cannot recommend to use it unless tags performance is critical AND tags and document references are 
#-# not considered as critical information.
# tag.rightCheckStrategy.hint=exhaustive
# tag.rightCheckStrategy.hint=unsafe

The RSA Crypto script service issues SHA256 certificates by default

The RSA Crypto script service (accessible from services.crypto.rsa) now issues certificates signed with SHA256+RSA instead of SHA1+RSA. See XWIKI-19676 to learn more.

Image Attachment Preview

The attachments tab at the bottom of the page is now displaying a preview for image attachments.

Watched Locations Enhanced

The notifications toggles now take into account the preferences that you have enabled. Events that have not been enabled first will not be displayed anymore, even if you watch a location where these events happen.

This feature is still disabled by default. See how to test it.

Auto-suggestion of pages

The auto-suggestion of pages feature has been implemented in new places:

  • Administration Descriptor section
  • Template Provider Sheet

Configuration in /etc/xwiki

XWiki will now try to find xwiki.cfg and xwiki.properties in /etc/xwiki/ on file system before looking in the webapp resources.

Buttons appearance

We made some changes on the visual aspect of buttons:

  • the gradient on the buttons background has been removed
  • buttons are now borderless, except for the default buttons since they have the same background as the default background

Language Picker

It's now easier to select a language in the administration for your wiki.

Notifications Auto Watch is now disabled by default

An important bug has been discovered in the Notification Applications that prevents using the Auto Watch feature when the wiki contains a lot of pages. For this reason, the default behavior for the Auto Watch feature has been set to not automatically follow any page. Nevertheless, users and administrators can still decide to change their own settings.

New Watch button state

The behaviour of watch buttons have changed to be more accurate regarding users' custom notification filters: if users have filters concerning some specific events only (e.g. a filter to watch mention on the whole wiki) the watch buttons will be displayed as "undecided". The idea is to expose to the users that "some events" are actually watched for that page, space or wiki.

Also using the watch buttons might disable some already existing custom filters, if those are concerning the exact same location and are contradictory. So for example, if a filter has been created to ignore mentions on a specific space, and the user decides to watch this space, then automatically the filter to ignore mention will be disabled. It can be enabled back manually by the user through the notification settings.

Added various HTML landmarks to improve the view page semantics.

Enhanced notification filters AST (Abstract Syntax Tree)

In XWiki 9.7RC1, we have introduced an Abstract Syntax Tree (AST) to generate the query that fetch the events we want to display as notifications.

This AST has been created for 2 reasons:

  • in the future, the events might be stored in a different way, and the current HQL query might be not effective on a different storage (such as NoSQL). This AST abstracts the language so the query could still be effective, as soon as we have a translator for the target language.
  • it's easier for developers to write a NotificationFilter by generating an AST than generating a good HQL query that must escape its values and co-exists with other filters...

In this release, we have rewritten the whole internal query, and we had to introduce new types of ExpressionNode to handle all use-cases. This new nodes are:

  • BooleanValueNode to handle a boolean value
  • DateValueNode to handle a date
  • EntityReferenceNode to handle an EntityReference without manual serialization
  • GreaterThanNode to handle >= comparison
  • InNode to check if a property or a value is contained in a list
  • LesserThanNode to handle <= comparison
  • StartsWith to check if a value or a property starts with some other value

Since theses nodes have been created for our own implementation needs, please open a JIRA issue if you wish to have more.

Selection preserved when switching between WYSIWYG and Source

We upgraded the CKEditor Integration extension and the new version comes with a long-awaited feature: the selection / caret is preserved when switching between WYSIWYG and Source area. This makes it really easy to:

  • check the wiki syntax that corresponds to the current WYSIWYG selection
  • check how the selected text from the Source area is rendered when switching back to WYSIWYG

HTTPS extensions repositories

The extensions repositories are now accessed through HTTPS instead of HTTP.

Live Data popover menu

Before XWiki 13.6, a double click on a property of a Live Data would switch it to edit mode. This mechanism was causing different issues, especially when the entries were containing links.

We have deactivated the double click and a popover is now shown to the user.

On devices equipped with a mouse, the popover is shown when hovering over an editable property and it proposes a single edit action.

On touch-based devices, the popover is shown on touch on editable entries, and on touch on any links. They respectively propose the edit and follow link actions (touching a link in an editable property proposes both actions).

Allow to force save in case of editing conflict

Starting with XWiki 11.2RC1 we introduced a mechanism for detecting edit conflict during the edition of a page.

We introduced in this release a new window in case of editing conflict. You now have two main choices:

  • force save the page: in that case you will override saved while you were editing the page; they are not really lost though since they might be retrieved in the previous version of the page.
  • reload the editor: in that case your changes will be lost and the editor will be reloaded with the last version saved.

We display the diff between the version you're trying to save and the last version that has been saved, so you can copy some changes made and reapply them if you like. Note that you can also simply cancel the save and go back to the editor to make changes before trying again to save. You can click on the arrow of each action to have a quick description of what it actually means.

Removed misleading shortcut

Removed the META+V shortcut used in the jump dialog as it was preventing users from pasting.

Temporary Attachments

Starting with this release the files uploaded through the WYSIWYG editor (e.g. when inserting an image or when dropping a file on the editing area) are not saved right away as page attachments. Instead, they become temporary attachments that are saved (linked to the edited page) only when the content of the WYSIWYG editor is saved by the user. This means for instance that when creating a new page, uploading a file doesn't create the page anymore. The user needs to click on the Save button to create the page. Of course, the Cancel button is now behaving as expected: any file uploaded since the last save is discarded along with all the unsaved content changes.

Create Wiki button in the Wiki Index

A button "Create Wiki" has been added on the top of the Wiki Index, so you can decide to create a wiki after browsing the existing ones. 

This behavior is more consistent with the Blog Application, where you can create a new post in the same page that you could read existing ones. In the future, we will make this behavior generic in XWiki.

Visible Save

The save buttons bar is now always visible which makes it simpler to see the buttons, even for long pages (some users used to not find the buttons).

Optional Standard Flavor dependencies

The following dependencies are now optional, which means that they can now be uninstalled easily (before, uninstalling them would uninstall the Flavor too!):

  • xwiki-platform-logging-ui
  • xwiki-platform-user-directory-ui
  • xwiki-platform-scheduler-ui
  • xwiki-platform-help-ui
  • xwiki-platform-flamingo-theme-bootswatch
  • xwiki-platform-search-solr-ui
  • xwiki-platform-search-ui
  • xwiki-platform-office-ui
  • xwiki-platform-invitation-ui
  • xwiki-platform-appwithinminutes-ui
  • xwiki-platform-linkchecker-ui
  • xwiki-platform-sandbox
  • xwiki-platform-sharepage-ui
  • xwiki-platform-distribution-flavor-tour
  • application-templates-ui
  • editor-tool-highlighting-ui
  • xwiki-platform-wiki-ui-mainwiki
  • xwiki-platform-wiki-ui-wiki
  • xwiki-platform-menu-ui
  • application-help-center

Include Macro Author

It's now possible to control which author should be used to execute the target of include macro. See Include Macro for more details.

Notification emails embed images present on the mail template

The notification emails are based on a template (XWiki.Notifications.MailTemplate) that you can customize. Now it is possible to attach images to that templates, and they will be embedded in the notifications email.

To display them in the email, you need to use the syntax <img src="cid:myImage.png" />.

Notifications Performances

The performance of the Notifications feature has been improved by implementing some in-memory caching of events for the users and more importantly its impact on the rest of the XWiki instance has been drastically reduced by limiting the resource allocated to it. This is a stopgap solution while waiting for a future redesign of the Notifications feature for better scalability for large volumes.

In-place edit for object properties

You can enable in-place editing for an existing XWiki application, if you're using the Vertical Form layout, by editing the application sheet (the page used to display the application entries) and operating 2 changes:

  1. Load the JavaScript code required for in-place editing and define some variables:
    #set ($discard = $xwiki.jsfx.use('uicomponents/edit/editableProperty.js', {
      'forceSkinAction': true,
      'language': $xcontext.locale
    }))
    #set ($object = $doc.getObject('Path.To.YourClass'))
    #set ($editing = $xcontext.action == 'edit')
  2. Add some meta data to the definition term (dt) elements that wrap the field names:
    <dt #if (!$editing && $hasEdit)
        class="editableProperty"
        data-property="$escapetool.xml($services.model.serialize($object.getProperty('yourProperty').reference))"
        data-property-type="object"#end>

The result should look like this:

editObjectPropertyInPlace.png

UI Extension improvements

  • New uiextension and uiextensions macros have been introduced to ease the creation of extension points and display of insertion UI extensions in general in a wiki content.
  • UI extensions now support inline execution. UI extension API used to only allow standalone content, but it's now possible to tell them that they should produce content to insert inline.
  • The default UIExtensionManager component now also check if a specific UIExtensionManager exist for the given extension point identifier.

See UIExtension Module for more about UI extensions.

Menus use the Icon Theme

Before all Icon themes shared the same menu icons (coming from Bootstrap's Glyphicon). Now the Icon themes affect also the icons from the content menu and drawer.

Template Restrictions

It's now possible to specify visibility restrictions separate from creation restrictions on a template provider and to set default values. See the documentation for more details.

Live Table User Filter

Filtering the Live Table rows by a column that display users should be easier now with the new suggest filter.

Default Class Sheet Shows Object Count

The default class sheet now shows the number of objects (of the current type) found on each page.

Generate TOC for another page

It's now possible to generate a table of contents for another page with the introduction of the reference parameter.

Backlink support improvements

The following areas containing backlinks are now refactored when renaming a page:

  • Images and attachments in wiki content
  • Wiki content in TextArea XObjects when the content is marked as containing markup

Standard version of the document in the history

It's now possible to see/compare/revert to the standard version of a document (the one coming from the installed extension) right from the document history view.

UIXP for Content Footer

A new UI Extension Point has been introduced to allow to inject content in the footer of a page content. This UIXP is already used to display tags and authors at the bottom of the page, but any extension can now use it for other kind of contents.

Notifications Email Renderer

You can override the way notifications emails are generated for each individual event type. See Notifications API.

Help Center Application bundled by default

The Help Center Application has been bundled with the default XE flavor (on the main wiki only) in order to help new users get familiar with XWiki faster. It can be easily accessed from the Applications panel.

The RSA Crypto script service issues SHA256 certificates by default

The RSA Crypto script service (accessible from services.crypto.rsa) now issues certificates signed with SHA256+RSA instead of SHA1+RSA. See XWIKI-19676 to learn more.

Embedded core extension descriptors

All the jars packaged in the standard JAR comes with their complete Extension descriptor so XWiki won't try to find them in the repositories to get more information anymore. It will still be the case for any jar which does not provide a complete descriptor or jars that comes from the application server (but only the first time, then it's cached).

Notifications custom filters livedata can be filtered and sorted

The notifications settings have been improved to allow filtering and sorting the custom filters livedata: this allows a better handling of the watching pages filters.

The PDF export is now generating internal links as much as possible. By internal links we mean links that make the PDF viewer scroll the target content into view rather than opening it in a web browser. The following types of internal links are supported:

  • links to a fragment from the same page that is included in the PDF export (e.g. #HDescription)
  • links to a fragment from another page that is included in the PDF export (e.g. /xwiki/bin/view/Other/Page#HDescription)
  • links to another page that is included in the PDF export (e.g. /xwiki/bin/view/Other/Page)

Internal links that use fragment identifiers are updated automatically, before printing the content to PDF, to target the corresponding global fragment identifier that is generated by the shared id generator used when rendering multiple pages for PDF export. In other words, having multiple sections with the same name in the PDF export shouldn't cause any problems because the links that target them are updated properly.

Checkout the PDF Export Application documentation for more information.

Grace time for Live notifications

The grace time of the live email notifications sent by the platform to the users can be configured in xwiki.properties. You can get more informations in the Notifications Application documentation.

Simplified Page Rename

The Rename Page dialog has been simplified:

  • the "Preserve Children" option is visible only if the page to rename has child pages.
  • the "Update Links" option is now visible only to advanced users. For simple users the back-links are always updated.

Liked pages are displayed in a LiveTable

Liked pages are now displayed in a live table in the user profile.

In the past, when several long running actions were happening on your wiki (page deletions, copies, subwiki creation, etc), an action had to be finished before the next one could be triggered. This is no longer the case and they run in parallel. If there are common pages affected by the various actions then a wait will still occur.

Revamping of notification watch buttons

This UI is still experimental and the look & feel and location might still change in the next releases. Don't hesitate to provide feedbacks about it on the forum.

We changed the way one can decide to watch a location in XWiki.

Starting with this release, a button is present in all pages next to the edit button. This buttons shows by default the current state of the page:

  • Followed: if you're following the page to receive notifications about it
  • Blocked: if you're blocking the page to not receive notifications about it
  • Not set: in case you haven't set any preferences for watching or blocking it
  • Custom: this appear if you have some preferences corresponding to that page but that are specific to some specific event types, or some specific formats (e.g. you only want to receive some notifications by email for a specific location).

If you click on the button, you will obtain a modal window explaining the current state (e.g. you might have a page followed because you are actually following a space containing that page), and allowing you to perform actions to change that state.
That modal also contains a link to access directly the notification filters settings: this is useful if you want to properly review your settings or perform custom actions from there. Note that if the current state is custom you can only perform actions from the notification filters settings. 

Async Form Validation

A new JavaScript API is available to help implement asynchronous form validation. It can be used like this:

require(['jquery', 'xwiki-form-validation-async'], function($) {
 const titleInput = $('input[name=title]');

 const validateTitle = () => {
   if (!titleInput.val()) {
     return Promise.reject();
    } else {
     return new Promise((resolve, reject) => {
        ...
      });
    }
  };

  titleInput.on('input', () => {
   // Schedule the asynchronous validation after 500ms. The namespace is used to prevent replacing validations added by
   // other modules.
   titleInput.validateAsync(validateTitle, /* delay: */ 500, /* namespace: */ 'myModule');
  });
});

Disable deprecation warnings

A new property property logging.deprecated.enabled xwiki.properties allow controlling if warning related to use of deprecated APIs should be logged or not. See Logging Module for more details.

Minor changes do not generate notifications anymore

A new filter has been created, to hide events about minor changes. This filter can be disabled, but is enabled by default.

Added keyboard navigation to the lightbox dropdown. The dropdown can now be opened from a keyboard and navigated with tabulator presses.

Smaller serialized job status

Job status are now zipped (new jobs will end up with a file named status.xml.zip instead of status.xml). The content of the actual XML used to serialize the progress was also optimized a little (removed various metadata which did not really needed to be serialized) when possible. This should help reduce quite a lot the disk space used by some jobs statuses.

Icon Macro

A new icon macro has been introduced. It supports displaying an icon from the current or a chosen icon set and can thus be used to display icons that are consistent with XWiki's UI.

Improved avatar image quality

XWiki supports server-side image resizing since version 2.5 but the quality of the scaled images was poor up until now. Starting with this version we're using the Thumbnailator library which leads to better image quality. This is most noticeable in the case of the user avatars.

Automatic injection of required skin extensions

Lazy loading UI elements has become much easier with the automatic injection (on the client side) of the required skin extensions.

Active Installs for Extensions

The number of active installs is displayed for each extension in the Repository App's home page livetable and in the extension page.

Attachment Move

A new button is now available in the attachments pane, allowing to move or rename an attachment. It is possible to change the name or the location of the attachments. Optionally, a redirection action is proposed, allowing to automatically redirect requests to the old location of an attachment to the new one.

Jobs REST API improvements

Fail job started with async=false now return an error code 500. A serialized error message with complete stack trace is also provided in the Job status.

Object editor does not save automatically on object creation/deletion anymore

The behaviour of the Object editor changed to be more consistent: the changes performed like object addition or deletion are now only saved when clicking on the save button.

Note that for developers we introduced new saving parameters to allow adding and deleting objects on a single save.

Split Office Content into Nested Pages

The Office Importer Application has been improved to generate (by default) non-terminal (nested) pages when the "Split document" option is selected, if the target wiki page is also non-terminal. The following strategy was implemented:

  • if the target wiki page is terminal then the "child" pages created by the split operation are also terminal
  • if the target wiki page is nested (non-terminal) then:
    • the "child" pages are also nested, if the current user is simple
    • advanced users have a checkbox to control whether the "child" pages are terminal or not, but by default they are not

Besides this, we also did a couple of small improvements to the office import form to:

  • filter office files based on media type (when browsing the local file system)
  • improve existing field labels and hints, adding missing hints
  • hide UI elements that are not relevant for the office import operation
  • perform the office import asynchronously and redirect the user directly to the imported page after a successful import operation

New XAR entry types

The following new XAR entry types have been added:

  • customizable

The name of the wiki is now displayed in the notifications

When a notification concerns a page that is not in the current wiki, the name of the wiki is now displayed in the notification.

Maven extension repositories can be configured with custom HTTP headers

It is now possible to define extra HTTP headers to be used when connecting to a maven extension repository. See the maven extension repository connector documentation to learn more.

Velocity and ScriptContext synchronization

VelocityContext and ScriptContext are now fully in sync (and if you find a use case where it's not true create a BUG on  https://jira.xwiki.org) and VelocityContext is now close to internal detail. This allows for example defining a variable in Velocity and accessing it from a Groovy script:

{{velocity}}
## Setting some script binding in Velocity
#set($myvar = "toto")
{{/velocity}}

{{groovy}}
// Lets use the script binding that has been set in previous script
print myvar
{{/groovy}}

More details

Recommended Templates when creating pages

Depending on the location, when creating a page, the page type could "promote" several Templates and the first one might be automatically selected. This promotion occurs for Templates that have a "creation restriction" matching the current location (or a parent of the current location).

Example: When going to the Blog home page or when on any Blog post, if you try to create a page, you will see that the Blog Post Template will be displayed first in the list and it will be pre-selected. The same thing will happen for applications created with App Within Minutes.

More details in the documentation.

All filters preferences are displayed in the same livetable

The "advanced filtering options" window has disappeared, and all filters are displayed in the same place.

Warning when the dimensions are larger than the selected image

A warning message is displayed to the user when the width or height of an image are larger than the dimensions of the selected image.

Solr Debian package

A new xwiki-solr-core Debian package is now provided, which automatically registers an xwiki core in a standalone Solr instance (provided it uses the standard setup).

Live storage of job log

JobStatus#getLog() is now deprecated and replaced by JobStatus#getLogTail() which provide more streamed APIs to navigate in the log.

Improved Multi-Term Search Relevancy

This is commonly referred to as sloppy phrase matching and allows for more "Googleish" query strings. The implementation allows for partial multi-term matching so that searching for long phrases won’t “hide” documents with a subset of shorter multi-term matches.

For those interested in the more technical aspects:

  • The query string is split into groups of multi-term contiguous sequences (word shingles), ignoring stopwords where appropriate.
  • The higher the number of terms in close proximity the more relevant the document will appear.
  • While the order of the terms in the query string is important for forming word shingles, the order in which the terms appear in the document doesn’t affect the score.
  • Stemming is still used so that all forms of each word are considered matches even in multi-term relevancy calculations.
  • Exact matches are still returned when terms are encased in quotes.

Mandatory documents improvements

  • AbstractMandatoryDocumentInitializer have been made public (and improved a bit). It's very useful to initialize documents/classes required by an extension and there is no reason to forbid contrib extensions to use it.
  • An AbstractMandatoryClassInitializer base class have also been added to help class related mandatory initializers to concentrate on how they want the class to look like and not deal with how to migrate it anymore. Just need to implement createClass.

Edit protection

As with delete and rename operations, if a user tries to modify a page belonging to an Extension, a warning will be displayed to explain that it's very risky and it should be avoided.

10.4 will introduce configuration that helps the user have more control on this behavior (disable edit completely without even a warning, allow a user to hide this warning, etc.).

New Page picker in the App Within Minutes field palette

A Page picker has been integrated in the App Within Minutes and works like the User picker.

Moved the old event store to legacy

The old events store is still bundled with XWiki for now. However, it has now been moved to legacy in order to make sure it is not actively used in the product, to discourage others from directly using it (by mistake) and as a first step before actually stopping to bundle it.

Annotations on content generated by the HTML macro

Annotations can now be added on content generated by the HTML macro.

As a direct consequence, you can also add annotations to pages that are part of an application, such as AWM applications.

Children list

The list of children of a Page are now displayed using the Live Data Macro.

Filter for testing for restricted HTML cleaning

A new filter for HTML cleaning allows testing if HTML content would be affected by restricted cleaning, allowing to determine automatically if HTML content could also be used with restricted cleaning without risking any breakage.

Configuration permissions

It's now possible to implement permission checking for ConfigurationSource properties, to decide who has the rights to view or modify them. To implement this check for your ConfigurationSource component, you need to implement the ConfigurationSourceAuthorization component role.

Performance improvements for history display

Displaying the history and switching pages for a document that has a large number of revisions should be noticeably faster and use less memory.

Beginning and ending of job is not logged anymore if the verbose is false in the job request.

Set email grouping strategy per scheduler

The email grouping strategy can be defined at different levels (per wiki, and per user) and is specific for a given scheduler, using a new dedicated XObject XWiki.Notifications.Code.NotificationEmailGroupingStrategyPreferenceClass.

So an admin can add one or severals xobjects in XWiki.XWikiPreferences for defining the different strategies for each scheduler, at wiki level: the xobject needs to contain the name of the strategy to use, and the name of scheduler (hourly, daily, weekly or live).
This value can be overridden by a user if they perform adding the same type of xobject in their own user profile.

Script service to access the macro categories

Calling $services.rendering.getMacroCategories($macroId) returns a Set of the categories of the macro. See XWiki Platform - Rendering - XWiki-specific Implementation.

In some cases Extension Manager is able to propose to uninstall incompatible existing extension when installing/upgrading an extension. It's possible to force Extension Manager to fail the install plan in such a case to avoid any surprise. Note that it means that if an extension id changed it will fail to upgrade.

Improved Security Vulnerabilities scanner

On XWiki 15.5 the Security Vulnerabilities Application was limited to installed extensions. The scan now includes core extensions as well as dependencies provided by the environment (e.g., the servlet engine).

Environment vulnerabilities are listed in a separate tab.

Added a new tip to the Tips Panel from the Help application. This tip describes how to access the list of keyboard controls for CKEditor.

RightUpdatedEvent

A org.xwiki.security.authorization.event.RightUpdatedEvent event is now sent when a modification may have an impact on the result of a right check (modified XWikiRights object, modified group, etc.).

What's New API

New experimental API to gather external news related to XWiki.

Example to get news items from a xwikiblog source, for a given user, filtered by a category:

@Inject
@Named("xwikiblog")
private NewsSourceFactory factory;

@Inject
@Named("xwikiblog")
private NewsConfiguration configuration;

...
List<NewsSourceDescriptor> descriptors = this.configuration.getNewsSourceDescriptors();
NewsSourceDescriptor descriptor = descriptors.get(0);
List<NewsSourceItem> items = this.factory.create(descriptor.getParameters())
 .forUser(...)
 .forCategories(...)
 .build()
NewsContent content = items.get(0).getDescription().get();
String itemDescription = content.getContent();
Syntax itemSyntax = content.getSyntax();
...

Improved the icon picker default selection

Instead of proposing an arbitrary set of icons somewhat close to the whole set, the updated icon picker displays only icons that match with the input typed so far, and sorts those icons alphabetically.

Add concept of image to What's New API

In preparation for displaying images in the What's New UI for news items, the What's New API has been updated to support getting images for news items.

@Inject
@Named("xwikiblog")
private NewsSourceFactory factory;

@Inject
@Named("xwikiblog")
private NewsConfiguration configuration;

...
List<NewsSourceDescriptor> descriptors = this.configuration.getNewsSourceDescriptors();
NewsSourceDescriptor descriptor = descriptors.get(0);
List<NewsSourceItem> items = this.factory.create(descriptor.getParameters())
 .forUser(...)
 .forCategories(...)
 .build()
String imageURL = items.get(0).getImageURL().get();
...

Deprecated Mail Script Services

The $services.mailsender and $services.mailstorage Script Service entry points have been deprecated in favor of $services.mail.sender and $services.mail.storage.

Display extension id

The extension id is now also displayed in the Dependencies section of the Repository Application.

Consistent Blog Icons

The icons used in the Blog Application are now displayed using the Icon Theme Application, hence they are now consistent with icons used everywhere else in XWiki.

Replace attachment with Attachment Selector

When uploading a new file from the Attachment Selector you now have the option to replace the selected attachment.

Allow to store a StaticList value in a large string

When creating a Static List class, it is now possible to choose to  Allow large string. This can be useful if this list aims at storing large values. 

Less strict code verification in the reset password system

We allow to relax a bit the reset password email link security mechanism to avoid it being revoked at first access, in order to avoid issues with software that checks email links. This mechanism can be used by changing a property in xwiki.properties:

#-# [Since 13.10.1]
#-# [Since 14.0RC1]
#-# Define the lifetime of the token used for resetting passwords in minutes. Note that this value is only used after
#-# first access.
#-# Default value is 0 meaning that the token is immediately revoked when first accessed.
#-# Use a different value if the reset password email link might be accessed several times (e.g. in case of using an
#-# email link verification system): in such case the user will have the defined lifetime to use again the email link.
#-#
#-# The default is:
# security.authentication.resetPasswordTokenLifetime = 0

The location picker breadcrumb icons now have a proper text alternative displayed on hover to assist in the understanding of their use.

Improved contrast on the "Excluded page" None element, in the Look & Feel -> Navigation Panels administration subsection.

New Export "excludes" parameter for XAR/HTML

The new excludes parameter now allows the API users to craft more expressive request, such as "export all this space except those pages". This new parameter is supported for both XAR Export and HTML Export.

Macro Categories listed in the available macros page

The list of all the categories of the macros are now listed in the available macros page.

Added keyboard support to the drawer. The focus will not go in the drawer when it's closed. The drawer can be closed by pressing `Escape` and a new button is added to make it easy to close the drawer.

Increasing contrast

The info button of the Flamingo Theme is now increased to conform to the minimum contrast defined in the Web Content Accessibility Guidelines

Rendered Changes Using Image Data

A change in the source URL, or reference, of an image displayed on a wiki page, where the image itself is not modified, doesn't appear in the rendered diff anymore when comparing the revisions of that page.

User Profile Preference Hints

We have added documentation hints for User Profile Preferences so that it's more obvious to understand what each option means.

Support targeting groups in Notifications

Using a TargetableEvent in the Notification API now allows to target also Groups and not only Users anymore.

Added autocompletion to the login page and the register form.

Allow to unregister components in Extension Mojo

If you use some XWiki Maven Build Tools such as the Extension Plugin or the Packager Plugin, we introduced a new parameter disabledComponents in those mojos to allow to unregister some components during their execution.

A typical usage of such parameter can be to prevent the execution of a MandatoryDocumentInitializer, for example:

<configuration>
 <disabledComponents>
   <disabledComponent>
     <type>com.xpn.xwiki.doc.MandatoryDocumentInitializer</type>
     <role>XWiki.XWikiServerXwiki</role>
   </disabledComponent>
 </disabledComponents>
</configuration>

Global Job Runner JavaScript Module

The xwiki-job-runner JavaScript module has been published in the global RequireJS configuration which means it can now be used directly without specifying its path:

require(['xwiki-job-runner'], function(JobRunner) {
  ...
}

See the Job Module documentation for more information.

WYSIWYG Editor Paste Filter

The WYSIWYG content editor has a more strict paste filter that removes non-semantic styles (e.g. font size, text color). This means that the content you paste into the editing area will inherit the styles of your wiki, leading to a more consistent look & feel. The PDF export also benefits from this change because some of the filtered styles were causing problems.

Groups can be filtered by their title in groups livetables

It is now possible to filter groups by their title in the groups livetables or the access rights livetables. This is particularly helpful in case a group has a “pretty name” that is more user-friendly than the name of the group document.

New helper for required right analyzers

A new component named BlockSupplierProvider is provided as part of the Required Rights API. It makes it easier to write custom required rights analyzers in extensions that trigger warnings when editing a document either grants rights that the content was missing or removes rights that the content previously had. For details, please refer to the documentation.

You can now disable the WatchList Application without uninstalling it thanks to a new option.

Deprecated macro parameters are hidden

When inserting a macro from the WYSIWYG editor the deprecated macro parameters are hidden in order to discourage their usage and to simplify the UI. A deprecated macro parameter is shown only if it has a value set (when editing a macro).

Updated icons for attachment upload status

The new icons use the current icon set. This means that it will use font awesome icons instead of Silk with the default configuration.

Localization REST API

The localization module is now providing a REST API. This API allows to request the raw source from a set of translation keys.

For instance:

# Request of a single translation, the locale is the default one.
curl -H 'Accept: application/json' http://localhost:8080/xwiki/rest/wikis/xwiki/localization/translations?key=administration.section.users.deleteUser.newAuthor.error
# {"translations":[{"key":"administration.section.users.deleteUser.newAuthor.error","rawSource":"The selected user doesn''t have {0} rights!"}]}

HTML cleaner supports HTML5

The HTML cleaner in the XML Module now supports cleaning HTML 5 into XHTML 5 when setting the HTML version parameter.

Changing Page Syntax from WYSIWYG Editor

Changing the page syntax from the WYSIWYG Editor has suffered some updates:

  • we don't reload the entire page anymore but only the WYSIWYG editor instance (in order to take into account the new syntax); the WYSIWYG editor has to be reloaded because the page syntax affects core editor configuration that cannot be changed on the fly (see the CKEditor Integration documentation for more information);
  • the WYSIWYG editor is always reloaded when changing the syntax, no matter whether you choose to convert the content or not (for the reason mentioned above)
  • the editing mode (Source vs. WYSIWYG) is preserved on reload
  • if the new syntax doesn't support WYSIWYG editing (e.g. because it doesn't have a renderer) then the WYSIWYG editor will force the Source mode after the reload and disable the WYSIWYG mode, warning the user about the current limitation.

Checkout the Page Editing documentation for additional information.

The AutoSave feature is now available in the WYSIWYG edit mode.

Less files in WebJar can be compiled to css

Less code packaged in WebJars can now be compiled to CSS when requested. When Less files are compiled to CSS, the less variables defined in the current skin are available and will be resolved to their current values.

Usage examples:

// Returns the raw content of test.less
$services.webjars.url('org.xwiki.platform:xwiki-platform-example', 'test.less')
// Returns the content of test.less compiled to css.
$services.webjars.url('org.xwiki.platform:xwiki-platform-example', 'test.less', {'evaluate': true})

Display conflict information inside unified diff

The display diff API allows to display information about conflicts.
The APIs to build unified diff takes as input a list of conflict elements that have been computed during a merge: some conflict information are then available in the resulting unified diff blocks, and can be used to present conflicts and possible decisions inside an UI presenting unified diff.

Custom filters migrated to Live Data

Notification custom filters are now migrated to Live Data, both for the default configuration in the administration, and in the user profiles.

Less strict code verification in the reset password system

We allow to relax a bit the reset password email link security mechanism to avoid it being revoked at first access, in order to avoid issues with software that checks email links. This mechanism can be used by changing a property in xwiki.properties:

#-# [Since 13.10.1]
#-# [Since 14.0RC1]
#-# Define the lifetime of the token used for resetting passwords in minutes. Note that this value is only used after
#-# first access.
#-# Default value is 0 meaning that the token is immediately revoked when first accessed.
#-# Use a different value if the reset password email link might be accessed several times (e.g. in case of using an
#-# email link verification system): in such case the user will have the defined lifetime to use again the email link.
#-#
#-# The default is:
# security.authentication.resetPasswordTokenLifetime = 0

NamespaceURLClassLoader#isClosed()

NamespaceURLClassLoader now exposes an API to know if it has been closed.

System filters migrated to Live Data

Notification system filters are now migrated to Live Data, both for the default configuration in the administration, and in the user profiles.

Added links towards documentation under the videos in the Help section.

Computed field values are now available in REST representations

In the REST API, the REST representation of objects containing computed fields now includes the computed values of these fields while previously, they contained an empty value.

It's now possible to "match" an ExtensionId with another ExtensionId having a null version. For example extension group:id will match group:id/version considering the first one as "all the version of the extension with id group:id".

Active Installs 2

New anonymous information is now sent by Active Installs (number of pages and number of users in both the main wiki and the subwikis).

Edit Section Styling Improvement

Improved the edit section styling to be in consistency with the Flamingo Skin style.

Ability to hide macro parameters in WYSIWYG

Thanks to the introduction of a new @ProperyDisplayHidden annotation that can be placed on Macro parameter classes, it's now possible to hide the parameter inside the WYSIWYG's Macro editor. This is useful to hide complex parameters that should only be used in wiki edit mode for example.

Example:

public class IncludeMacroParameters
{
...
   /**
     * @param type the type of the reference
     * @since 3.4M1
     */

    @PropertyDescription("the type of the reference")
    @PropertyGroup("stringReference")
    @PropertyAdvanced
   // Marking it as Display Hidden because it's complex and we don't want to confuse our users.
    @PropertyDisplayHidden
   public void setType(EntityType type)
    {
       this.type = type;
    }

   /**
     * @param page the reference of the page to include
     * @since 10.6RC1
     */

    @PropertyDescription("The reference of the page to include")
    @PropertyDisplayType(PageReference.class)
    @PropertyFeature("reference")
   // Display hidden because we don't want to confuse our users by proposing two ways to enter the reference to
   // include and ATM we don't have a picker for PageReference types and we do have a picker for EntityReference string
   // one so we choose to keep the other one visible and hide this one. We're keeping the property so that we don't
   // break backward compatibility when using the macro in wiki edit mode.
    @PropertyDisplayHidden
   public void setPage(String page)
    {
       this.reference = page;
       this.type = EntityType.PAGE;
    }
}

Changing Page Syntax from View

Changing the page syntax from the Information tab, while viewing the page, has suffered some updates:

  • XWiki will now propose to convert the page content and meta data to the new syntax, if the conversion is supported, but note that the changes will be saved only after saving the syntax
  • if the syntax conversion is not supported then XWiki will warn the user about the limitation
  • the page title and content are reloaded in order to allow the user to preview the effect of the syntax change before saving the new syntax
  • canceling the syntax change will also reload the page title and content

Attachment Selector can set a version summary

When using the Attachment Selector macro the user can now specify a version summary that will be recorded in the history. This is disabled by default but you can enabled it by setting the versionSummary parameter to true.

Extensions Security Vulnerabilities Application

After some forum discussions we agreed that the extension is current not useful to fix security vulnerabilities, and is at risk of presenting false-positive. Until those issues are fixed, we decided to stop bundling it as part of the standard distribution.

XWiki#getDocument(..., String revision) now supports a syntax to get document from other sources (installed XAR extension, deleted document, etc.).

Cluster members are uniquely identified

Each member of a cluster is now uniquely identified. The id is automatically generated once at startup and stored in the permanent directory.

Mimetype provided for attachments in Document Tree response

The mimetype is now provided for attachments when calling XWiki.Document to retrieve the document tree hierarchy.

Propose not yet installed macros

It's now possible for an admin to install and use a macro directly in the WYSIWYG macros picker. A list of not yet installed compatible macros is proposed at the end to improve discoverability. Note that in the future it'll be proposed to all users (even non-admins) for increased discoverability. Non-admins users will see a message asking them to contact an administrator to install the needed macro.

New Comment button

The comments section at the bottom of pages used to have the comment editor visible. There's now a Comment button to click when wanting to add a comment. This was done for 3 reasons:

  • For consistency with other actions where you have to click a button to do them (annotate, edit, create, etc).
  • It makes the UI a bit less cluttered and avoids focusing the attention on comments which was very visible, especially since we moved to using the WYSIWYG editor by default in comments.
  • It also improves the loading performance of XWiki pages since the editor doesn't need to be loaded when viewing pages

Social category in Administration

A new Social category has been added in Administration to gather all configurations related to social features. Those items were previously all in the Other category.

Improved Not Found Screen

Added partial matches for the Document/Attachment Does Not Exist suggestions, in addition to the existing stemmed and fuzzy matches, for better results.

We were previously searching using indexed Solr data (stemmed) and also using fuzzy searches (string difference of 2; helps with minor typos), but this did not cover partial matches. Example: "Sandb" is matched by the fuzzy search, since it has a difference of 2 characters ("ox"), but "Sand" is not matched by anything (no stemming and too greater string difference - 3).

Wiki Links with Auto-Generated Label in CKEditor

We upgraded CKEditor Integration to the latest version which brings support for creating wiki links with auto-generated label. The XWiki Rendering supports these type of links since a long time. They look like this in wiki syntax:

[[Path.To.Page]]

As you can see the link label is missing and so it is generated automatically when the page is rendered. The way the labels are generated can be configured. The new version of CKEditor Integration adds support for creating such links, but it's not enabled by default. You can enable it using the following in the Advanced configuration:

config['xwiki-link'] = config['xwiki-link'] || {};
config['xwiki-link'].autoGenerateLabels = true;

The reason we disabled this feature by default in CKEditor is because XWiki uses the page name (not the page title) for auto-generated link labels by default at the moment, which can confuse the users because we display the page title in the page tree and in the page suggest. But if you change the way the link labels are generated then you may want to enable this feature.

Velocity Object Tool

Provides various methods to manipulate objects from Velocity. For example to check for null:

#set ($result = ...)
#if ($objecttool.isNull($result))
  ...
#else
  ...
#end

Parameterized and translatable exceptions

A org.xwiki.logging.AbstractMessageException is provided to make easier to create exceptions with the same features as org.xwiki.logging.Message. See https://extensions.xwiki.org/xwiki/bin/view/Extension/Logging%20Module#HParameterizedandtranslatableexceptions for more details.

Simplified Unliking

A modal was previously asking for confirmation for removing a like on a page. This has been removed to make it simpler and more consistent: liking and unliking are now both immediate actions.

Pre-edit check can be cached

It is now possible to define a caching strategy for pre-edit checks, allowing to define when to re-display the results of a check to the user if they have been previously forced.

Added an order field to the "After Header" extension point.

Allow Skins to be loaded from the classloader

Skins can now be stored in extensions. If an extension installed on a wiki contains a skins/skinName/ folder, it can be discovered and used as a wiki Skin.

A new method refresh() has been added to XWiki.widgets.LiveTable (javascript) to dynamically refresh a livetable.

Recycle Bin API Improvements

Updated the Recycle Bin and Deleted Documents API to make it easier to work with.

PDF File Name

The file name suggested by the web browser when downloading a PDF generated by the PDF Export Application is now, by default, the title of the wiki page from where the export was triggered (instead of the Java UUID used for the temporary resource name). Checkout the documentation for more information.

Display image popover at cursor location

The image popover will be now displayed at cursor location, to make it more visible and accessible.

The deleter of a document is now allowed to restore it even without admin right (provided the user have enough right to create a document at this location).

Script API to access the macro descriptor

The rendering script service has been extended with APIs to resolve a macro id and to access the macro descriptor:

#set ($macroId = $services.rendering.resolveMacroId('info/xwiki/2.1'))
#set ($macroDescriptor = $services.rendering.getMacroDescriptor($macroId))

Check the Rendering Module documentation for more information.

Change the default font size used by the Formula macro

It is now possible to set the default font size to be used by the formula macro using the configuration key macro.formula.defaultFontSize. See the formula macro documentation to learn more.

Filesystem store location

It's now possible to set the location of the filesystem store without modifying the general permanent directory using property store.file.directory of the file xwiki.properties.

Indexing User

A new section to define a dedicated indexing user has been added in the "Search" category in the wiki administration.

The search index usually runs without a dedicated user. In some cases this creates minor issues when indexing the title of pages, e.g. in case of a closed wiki, where one cannot access as guest user the sheet that computes the user profile pages title as "Profile of «firstname» «lastname»". This is not possible unless the indexer is associated with a user that has access to the corresponding sheet. A new section in the "Search"  category of the wiki administration allows to set an "indexing user", which is used to access the sheets which might be used to compute page titles.

If this setting is left empty, the stored plain title of the page name is shown as title of the search result for affected pages.

Please read the description and especially about the security implications before setting an indexing user.

Upload summary

A new configuration property, attachment.upload.enableComment, was added to xwiki.properties to enable upload summaries.

#-# [Since 16.3.0RC1]
#-# Indicate whether or not comments for attachment uploads should be settable from UI, and displayed whenever the
#-# attachment revisions are listed. The default is false.
# attachment.upload.enableComments=false

Messages in Notifications

When the Message Stream Application is enabled (which is not the case by default), you can now see your messages in the notifications.

With this feature in place, the Notifications application is now able to fully replace the Activity Stream one (which will happen in the following versions of XWiki).

Allow to perform custom decisions in case of merge conflict

The Diff module now offers new APIs to enhance the 3-way merge operation. The MergeResult is now capable of returning a list of Conflict objects which gives some information about the conflicts that occurred during the merge. Those conflicts can be solved on a case-by-case basis by specifying some ConflictDecision in the MergeConfiguration that is passed to the merge operation.

The main goal here is to allow more fine-grained conflict resolution when performing a merge operation.

XClass Rename

The xobjects of an xclass are now updated automatically when the xclass is renamed if:

  • the xclass is not moved to a different wiki
  • the "Update Links" option is checked (which is the case by default)

Renaming xclasses is still considered a dangerous operation though, because xclasses are often used in scripts, which are not updated when an xclass is renamed.

Ability to exclude some locations from the Location Picker

The Location Picker Macro exposes an additional parameter exclusions allowing to exclude some locations (nested pages) from the list of locations that can be picked.

An API has been added to get orphaned dependencies

Disabling emoticons

It's now possible to disable default emoticons by editing xwiki.properties and overriding the mapping with an empty value. For example to disable (n) you'd add:

rendering.transformation.icon.mappings = (n) =

Two new generic extension points for the Document/Attachment Not Found views:

A new xwiki-commons-collection module has been introduced to share base collection related API

New API to unregister a custom right

It was already possible to register a custom right, but we were missing the API to unregister it, this is now possible in the AuthorizationManager API.

Raw Macro

When content is parsed, an XDOM tree is created. Sometimes you don't have any way to express the content you wish in that XDOM tree and you only wish that your content is output as is, when the XDOM is then rendered in a given syntax. You can use the raw macro for this need.

Example:

{{raw syntax="latex/1.0"}}
\loadglsentries{glossary}
\makeglossaries
{{/raw}}

New Namespace class

A new org.xwiki.component.namespace.Namespace has been introduced to help manipulate namespace in components and extensions world. It's mostly a helper for now but will probably be used more and more in APIs.

A new "table" category is now proposed in the Flamingo Theme Editor, where you can change the variables concerning the colors of the tables.

Reproducible XAR and XIP builds

When the Maven build is configured to be reproducible, building XAR and XIP extensions gives reproducible results now, too.

Macro List in Syntax Help

The Syntax Help page now displays the list of all the macros available in your wiki. This was previously covered by the XWiki.WikiMacros page which has now been removed.

Viewers in the more actions menu are no longer affected when customizing the docextra section

The viewers entries in the content menu now listen to the $displayShortcuts layout variable (as intended) and are no longer affected by the usage of the $docextras variable. For example, to remove all tabs and all shortcuts for the current page, you could write in a Velocity script in the page:

#set($displayDocExtra = false)
#set($displayShortcuts = false)

Global Job Runner JavaScript Module

The xwiki-job-runner JavaScript module has been published in the global RequireJS configuration which means it can now be used directly without specifying its path:

require(['xwiki-job-runner'], function(JobRunner) {
  ...
}

See the Job Module documentation for more information.

Mail Configuration inherited from main wiki

The Mail Configuration for a subwiki is now inheriting from the configuration from the main wiki. More precisely if the local Mail.MailConfig is empty for the looked up configuration property, it's looked for in the same page in the main wiki, and if not found then it defaults to the value from xwiki.properties.

WebJar category

A webjar category has been added for the Repository Application.

Restricted context macro

A new restricted parameter has been introduced in the context macro to allow executing content in a restricted content. See Context Macro for more details.

View source in viewers menu section

The View source link has been moved to the Viewers menu sub-section of Other actions menu, to be consistent.

Livedata colors now properly use the color theme variables. This fixes the display of livedata on color themes different from Iceberg. This difference is especially important on dark colorthemes.

Allow to create Static List class with value suggestion

It is now possible to create a Static List class that will display a suggest picker for the values that are entered.
Note that the displayer is only available when using the input display type.

Improved contrast on the App Within Minute application creation wizard for the active (green) and already finished steps (light grey).

Argument to specify the wait time in the stop_xwiki.sh script

You can now specify, in the stop_xwiki.sh script, the number of seconds to wait for the XWiki lock to be released before exiting. For instance "stop_xwiki.sh -wt 10" will make the script wait 10 second. The default wait time is now 30sec.

Remove User's default_language xproperty

Remove the default_language xproperty that could be set in XWikiUsers xobjects since it was not working (since a very long time ago, possibly 1.1M3) and it was not a very useful and used xproperty.

"My Groups" user profile section has been renamed to "Groups"

Check the User Profile documentation for more information.

Required Rights

The Required Rights Application analysis is deactivated by default as the analysis is still incomplete and the presentation needs to be improved to more clearly show what's wrong. Still, the analysis can already provide useful warnings and this is a good opportunity to provide feedback as this feature will be activated by default in a future version of XWiki. It can be activated by setting the security.requiredRights.protection to warning.

#-# [Since 15.9RC1]
#-# Indicates how documents are protected by required rights.
#-#
#-# The possible choices are:
#-# * none (the default): no required rights check
#-# * warning: a warning is presented to the user when trying to edit a document with required rights issues
# security.requiredRights.protection=none

Sheet priority

The sheet query string parameter now has priority over anything else. It used to be skipped in various use cases.

Live Table Database List Filter

Filtering the Live Table rows by a column that corresponds to a Database List property should be easier now with the new suggest filter.

Forced default image style

The default image style can now be forced, meaning that it will be used by default and a style must be selected.

Editing a Flamingo Theme loads a bit faster now.

Annotation toggle on click

We changed the way the annotation popup is shown: instead of hovering over the annotation icon you now have to click on the annotation icon. This new behavior is more mobile friendly.

An API has been added to get backward dependencies including optional dependencies

Display content in restricted mode

A new URL parameter is available for viewing pages in restricted mode.
You can now use restricted parameter, with the following values:

  • false (default): the macro transformations are normally executed
  • true: macro transformations are executed in degraded mode or not executed at all, depending on the macro implementation.

In particular, various scripting macro such as Velocity Macro or Groovy Macro are not executed in restricted mode.
This parameter might be then use to check if a page is well displayed for user who cannot execute those scripts for example.

New parameters for the Gallery Macro

The Gallery Macro has 3 new parameters. You can use the width and height parameters to control the amount of space reserved for the gallery. The class parameter can be used to add custom CSS class names in order to customize the appearance of a gallery. Here's an example where we use the Bootstrap Grid system:

{{gallery class="col-xs-12 col-sm-6 col-md-4" width="" height="300px"}}
image:[email protected]
{{/gallery}}

Visual separation for page tabs

The page tabs are now visually separated from the page content.

Mail Address HTML Displayer

An HTML Displayer for email addresses (i.e. objects of type javax.mail.internet.InternetAddress) has been added (it displays the email address obfuscated if obfuscation is on). It's not used anywhere but can be called. Scripting example:

{{velocity}}
#set ($email = $services.user.properties.email)
{{html}}
$services.display.html.display('javax.mail.internet.InternetAddress', $email)
{{/html}}
{{/velocity}}

Hints for Meta Properties

The class editor is now displaying hints for meta properties when they are available. You can check for instance the Size, Editor and Content Type meta properties of a Text Area object property.

Menu is now available in Administration

The Menu application is now available through the Administration under the Look & Feel category. By default, the application is now hidden from the panels of applications.

Check user inactive status by default

If you configured the registration page to enable the Use Email Verification, then new registered users are by default inactive until they fill a form. Starting with this release the active status is checked by default at login. The previous option to enable this in the Administration > Registration page, Authentication Active Check, has been removed.

Wiki macros can now access current macro descriptor using $xcontext.macro.descriptor binding.

Display Type property annotation

The PropertyDisplayType annotation has been introduced to allow specifying a display type (that can be different from the actual property type) which can be used when rendering properties (i.e. inputs of the WYSIWYG macros).

Display page reference in the information viewer

You can now retrieve quickly the page reference of any page by going to the Information tab. The reference is by default displayed to the local wiki, but you can switch it to get a global reference for all wiki in a farm. The right button allow you to quickly copy it to the clipboard.

Filtering for "logo" or "skin" in the Administration menu will now list Look & Feel > Themes as the place to customize them.

Export menu extension point

It's now possible to inject a new button in the export menu. Checkout the documentation for more details.

Improved Notification Widget Style

Notification widget messages are now displayed with a style that is more aligned with XWiki UI guidelines regarding spacing, border and font weight.

Updated attachments modal

The attachments pop-up that is displayed for deleting an attachment is now a bootstrap modal, having the same functionality as before.

Home page change

The Youtube video located on the XWiki Standard flavor's home page has been removed (for privacy reasons and also for increased usability, as the underlying markup was complex to understand for users).

Notification email contrast

 Colors of the default notification email content have been updated to have improved contrast.

Mail Obfuscation APIs

There are now 2 new APIs related to Email Address Obfuscation:

Pre-edit document check

It is now possible for extensions to define a pre-edit document check, similar to what already exists for locked pages, or pages owned by extensions.

Configuration option to disable in-place editing

A new configuration option is available in xwiki.properties to disable the in-place editing of plain wiki pages.

#-# [Since 12.5]
#-# Indicate if the XWiki documents should be edited in-place, without leaving the view mode, whenever possible (e.g. if
#-# the default edit mode for that document and the preferred editor both support in-place editing). When enabled,
#-# clicking on the document Edit button makes the document title and content editable in-place, without leaving the view
#-# mode. When disabled, clicking on the document Edit button loads the default (stand-alone) edit mode for that
#-# document.
#-#
#-# The default is:
# edit.document.inPlaceEditing.enabled = true

Execution context push/pop

Helpers has been adding in ExecutionContextManager to have a better control on the way to push/pop ExecutionContext instances. See Context Module for more details.

Localization Script service allow passing the Locale to search for (instead of current Locale).

Documents macro migrated to Live Data

The documents macro is now using a Live Data (vs a LiveTable previously). Consequently, the Page index and the Space Index are now displayed with Live Data.

SecurityEntryReaderExtra in extensions

It's now possible to contribute a org.xwiki.security.authorization.SecurityEntryReaderExtra component in an installed extension.

New event when livedata entries are displayed

A new javascript event xwiki:livedata:entriesUpdated is now triggered for LiveData when the entries are displayed: this event can be listened to when an extension need to augment the data.

Menu application visibility change

The Menu application is configured to only allow Administrators to see it (this can be changed through permissions). However all Menu entries created with the application are viewable by everyone by default (provided the visibility scope used when creating the entry allows it; for example selecting a "Current User" visibility makes the created menu only visible for the current user).

Table of content entries customization

It is possible to decorate the Table of Content entries by providing a component with the TocEntryExtension role.

The Delete section of the Content category of the global administration is now hidden when the recycle bin is not activated.

Improved default look and feel of PDF export

The look and feel of the default PDF export was slightly improved: sans serif font is now used by default and some graphic elements were added to better separate the regions of the page (header, footer, etc.).

Each package (WAR, Debian, installers, etc.) now has its own "environment extension" descriptor. Among other things it means they don't send the same id through Active Installs and this allows to know what packaging users have used to install XWiki.

It is possible to create custom Notification Filters

see the documentation.

Allow to disable the edit conflict mechanism

We introduced in XWiki 11.2 a mechanism that allows user to detect edition conflicts on a page and we are continuing to improving it. However this feature is still experimental and might have unwanted consequences on older extensions. So we added the possibility to completely disable the feature if needed, with a new property in xwiki.properties:
edit.conflictChecking.enabled = true

You can set this property to false and restart the wiki in case of trouble. In that case, please let us know so we can improve our feature.

Restore document and translations

When deleting the final revision of a document, from the History tab, the original document and all its translations may get deleted. To avoid having to restore them one by one, they are now all grouped in the same batch so they can be restored together.

Job Waiting Information

You might now see a new information box instead of the progress bar if another job is currently performed against the pages you selected. In that case, you have to wait that the other job is finished or cancelled before yours start. The UI would refresh automatically.

The Application panel has been improved for low width displays.

"Recommended" concept has been added to Extension and Repository API

Velocity macro for sanitizing URLs

A new velocity macro has been provided to allow getting sanitized URLs from request parameters to be used in HTML.

Deprecated and Internal Macros Hidden by Default

When inserting a macro, the WYSIWYG Editor (CKEditor) is now hiding the deprecated and internal macros from the "All Macros" category that is selected by default. In order to insert a deprecated or internal macro you need to explicitly select the corresponding category from the list. The following macros have been moved to the Deprecated category: Spaces, SpacesIndex and Workspaces.

Notifications settings are now available as macros

New macros have been created, so you can include your notification settings in many pages (such as the dashboard). These macros are:

  • {{notificationsEmailPreferences /}}
  • {{notificationsApplicationsPreferences /}}
  • {{notificationsFiltersPreferences /}}

FigureBlock & FigureCaptionBlock

New Rendering Blocks were added: FigureBlock and FigureCaptionBlock. For example those blocks are generated by the Figure Macro.

New tip about typing the [ character when editing in WYSIWYG to get autocompletion for links.

Customize message for denied access

It is now possible to customize the content displayed to the user when a denied access occurs, without modifying the skin, hence facilitating the upgrades. This customization can be brought by creating a page at XWiki.AccessDenied. It works in the same way as XWiki.DocumentDoesNotExist, XWiki.WikiDoesNotExist and XWiki.AttachmentDoesNotExist. See also the related documentation paragraph "Customizing error pages" that was added to the XWiki configuration guide.

Releases list

The list of Releases is now displayed using the Live Data Macro.

Features of extensions are now sent by active install. These are the various extension ids under which a given extension is known. Usually used to relocate extensions under a new extension id.

New HTML Sanitizer

A new HTML Sanitizer component has been added that allows checking if a certain HTML element, attribute and attribute value are considered safe according to the current configuration. This can be used when validating user input. The sanitizer also supports SVG and MathML with the features available when they are embedded in HTML documents.

It's now possible to disable core extension update at startup. See property extension.core.resolve in xwiki.properties.

On MySQL, the character set utf8mb4 is now set on the main database for new instances installed via our debian packages.

Affected children during page delete is now displayed with a Live Data

The list of affected children during page delete is now displayed with a Live Data.

Solr multi-core

It's now possible to "reserve" a dedicated Solr core for the specific storage needs of an extension. See Solr Search Application for more details.

New URL resource scheme for Reset password

The reset password and retrieve username features have been refactored to stop using wiki pages to work. The rationale is that these pages needed to be viewable by the guest user to work, thus making it impossible to protect the full wiki to guests (among other problems related to rights on these pages). Thus they have been re-implemented using dedicated URL schemes and components, and thus have had their URLs changed:

  • Reset password:
    • New URL: /xwiki/authenticate/reset 
    • Old URL: /xwiki/bin/view/XWiki/ResetPassword
  • Retrieve username:
    • New URL: /xwiki/authenticate/forgot 
    • Old URL: /xwiki/bin/view/XWiki/ForgotUsername

The old XWiki.ResetPassword and XWiki.ForgotUsername wiki pages must not be used anymore, and any custom change perform in those pages won't be taken into account (you'll need to port your changes to Java since the new feature is coded in Java). However, the pages have been kept to ensure that using the old URLs will keep working for the time being: the pages now redirect to the new URLs.

New typed extensions of Namespace

Each supported type of namespace now have a corresponding typed extension of org.xwiki.component.namespace.Namespace. See Component Module.

When importing an office document with embedded images, those images are now saved as attachments to the target wiki page. This used to be the default behavior until recent versions of LibreOffice / OpenOffice have started to embed the images in the generated HTML using the Data URI scheme, which ended up in the wiki syntax. We have now restored the initial behavior.

Temporary Resource Script Service

A new script service is available to check if a temporary resource exists and to get its URL:

{{velocity}}
#set ($tempResourceReference = ...)
#if ($services.resource.temporary.exists($tempResourceReference))
  [[Download>>path:$services.resource.temporary.getURL($tempResourceReference)]]
#end
{{/velocity}}

Configurable hidden macros categories

The list of categories hidden by default, previously hard-coded to Internal and Deprecated, can now be configured using the rendering.transformation.macro.hiddenCategories property in xwiki.properties.

#-# [Since 14.8RC1]
#-# Override the default hidden macro categories.
#-# Note: the categories are case sensitive.
#-#
#-# The default value is:
# rendering.transformation.macro.hiddenCategories = Internal,Deprecated
#-#
#-# For instance, to make the "Development" category hidden by default, in addition to the "Internal" and
#-# "Deprecated" categories, you'd use:
# rendering.transformation.macro.hiddenCategories = Development,Internal,Deprecated

Filter group members by their full name

You can now filter the group members by their full name from the live table displayed on the group page or when editing a group from the administration, as long as the members are from the same wiki as the group itself. The members that are from a different wiki than the group can still be filtered by their reference (e.g. by user alias).

Likes list in the user profile

The list of likes of a user are now displayed using the Live Data Macro.

Allow to store Like average xobjects

Like implementation is based on Ratings, and until this version the configuration of Ratings we were using was hardcoded.

We provide in this version 2 new properties that allow to store the average ratings xobjects related to the Like information: those xobjects can notably be used to perform HQL queries with the total number of likes in pages, since this data is stored in them.

We only provide those properties as an experimental feature: it might be removed later, by providing a cleaner API for this usecase.

The properties are the following:

## Specify if the average rating should be stored or not for likes. Default value is false.
like.averagerating.isStored=true

## Specify where the average ratings should be stored. Default value is xobject. Possible values are currently solr or xobject.
like.averagerating.hint=xobject

Distribution Wizard configuration

It's now possible to control from the xwiki.properties file if the Distribution Wizard should be automated or interactive and which Flavor to install/upgrade on main or sub wikis. See DistributionWizard for more details.

Script Service API to get Macro descriptors

Example of usage: #set ($macroDescriptors = $services.rendering.getMacroDescriptors('xwiki/2.1'). Returns a List<MacroDescriptor>. More information in the Rendering Script Service documentation.

Live Data extensions

A new JavaScript API has been added to Live Data that allows adding custom panels to extend to functionality of the Live Data Macro.

New Syntax#valueOf(String) API

SyntaxFactory is now deprecated and replaced by the static Syntax#valueOf(String).

Allow to log deprecation warning in scripts

It's possible to log automatically a deprecation warning in a script, to inform users that some scripts might be removed in the future. This method checks the deprecation warnings configuration to only display the message if it is enabled.
You can use it like this:

## First argument is the logger name, second is the message.
$services.logging.deprecate("MyScript", "The script [MyScript] should not be used anymore")

The output warning is displayed with a [DEPRECATED]  prefix.

Automatic focus on comment input

The comment button now moves the cursor automatically in the comment input field when clicked. It used to only show the new input, that should be then navigated to manually.

The administration menu now has carets next to section names to highlight the fact that sections can be expanded to view subsections.

Synchronous mail resending

There's now an API to resend emails synchronously (we only had an asynchronous API before). This is useful when resending large amounts of emails which would require a lot of memory since all emails would be loaded from disk and put in the resending memory queue. 

TOC macro numbered property

The numbered property of the Table of Content macro is now marked as advanced and is only proposed in the "more" section of the macro configuration dialog. This is because we're now offering a Numbered Content Application covering the numbering use case in a better way.

The formula macro exposes a new configuration key to define the default image type to be used when rendering a formula. See the Formula Macro documentation to learn more.

History delete event

It's now possible to be notified when a range of document history versions is deleted using the event org.xwiki.bridge.event.DocumentVersionRangeDeletedEvent. See Model Bridge API for more details.

Forms styling handle HTML5 inputs

HTML5 inputs (color, date, datetime-local, email, number, search, tel and time) are now consistent with older input types (text and password) in the Flamingo Skin. They are all compatible with the Vertical Forms Guidelines.

Notification handling memory improvement

The dispatching of notifications to the user has been rewritten to reduce a lot the memory required for it and improve reliability.

uid Reference serializers now supports Locales in DocumentReference. It's added at the end of the string representation, in the same way as for other parts of the reference (same as what XWikiDocument#getKey() was doing).

Extended the image selection interactivity to allow faster selection

When adding an image to content in the WYSIWYG edit mode, it's now possible to double click the attachment to select in the gallery and validate the choice directly. Pressing Enter when focusing an attachment in this picker used to only select it, but it now also validates the choice. More information in the documentation.

Make most expensive steps more visible

The performance tree give interesting information but it was hard to see quickly which steps where causing performances issues.
More details

Filter Stream annotations

Thanks to Java 8 now supporting getting method parameter names through reflection, it's not required anymore to use @Name annotation in the definition of a filter. See Filter Module for more details.

It's also possible to override the name of the event (which is by default extracted from the method name) using the @Name annotation.

Filter manager make sure to calculate the event descriptor based on the top most overridden method (usually coming from an interface). Various things were not always properly inherited (like event name or reflection based parameters names).

Notifications sent by emails now contains a diff for each event

Previously only a link was displayed.

Export Without Paged.js

If you're getting a timeout while doing a PDF export and the exported content is not too big then you probably hit a Paged.js bug. Paged.js is the JavaScript library we use to layout the exported content in print pages. You can overcome this by unchecking the Table of Contents, Header and Footer from the PDF Export Options modal and then triggering the export again. This time the export will be done without Paged.js, relying solely on the web browser, which shouldn't pose any problems. Of course, the downside is that you loose the Table of Contents, Header and Footer. Fortunately Paged.js is under active development so we hope its bugs will be fixed soon.

Mail Sending Status list

The Mail Sending Status list of the Mail Application is now displayed using the Live Data Macro.

Configuration modifications

There's now a setProperties() API to modify ConfigurationSource properties. Scripting example:

{{groovy}}
import org.xwiki.configuration.*

def cs = services.component.getInstance(ConfigurationSource.class, 'mailsend')
cs.setProperties(['host' : 'localhost'])
println cs.getProperty('host')
{{/groovy}}

Live Data action icons can have custom css classes

Live data action icons can new have custom css classes. For instance, this can be useful to give a specific color to an icon.

Server-side image resizing disabled on PDF export

Images that are inserted from wiki syntax and have their width or height specified are by default resized on the server-side to reduce network traffic and speed up page load. This makes sense for page view, where zooming is not common, but it leads to poor quality images in PDF export, where zooming is very common. As a consequence we decided to disable the server-side image resize when a page is exported to PDF. This means the images displayed in that page will be included in their full size in the generated PDF. See the PDF Export Application for more information.

It is now possible to provide new redirection strategies

The RedirectionFilter role allows developers to define domain specific redirection logic.

Table of contents is easier to style

The ordered or unordered list element at the root of the table of contents macro now has the wikitoc class attribute such that it is easier to style via CSS.

Non-minified Javascript

Non-minified versions of JavaScript files are now also bundled by default in XWiki. This makes it much simpler to debug JavaScript issues in production. Just look for the non-minified (source) code using the developer tools provided by the browser. Since the minified code indicates the source map and the source map indicates the source file, the browser ends up loading all 3 (when the developer tools are open). If you can't find the source code then you can force the browser to load it by reloading the current page with ?minify=false in the URL.

Empty string in Static List

It is now possible to specify empty string values in a Static list by repeating twice the same separator. For example, using the default separators (|, , and space), the Foo||Bar string will be parsed as containing three values (Foo, empty string, and Bar), while Foo, Bar will be parsed as only two values (Foo and Bar), even if two separators (, and space) are used.

Temporary Resource Script Service

A new script service is available to check if a temporary resource exists and to get its URL:

{{velocity}}
#set ($tempResourceReference = ...)
#if ($services.resource.temporary.exists($tempResourceReference))
  [[Download>>path:$services.resource.temporary.getURL($tempResourceReference)]]
#end
{{/velocity}}

Two new specific extension points for providing recommendations in the Document/Attachment Not Found views:

Mail resending at startup

At startup, mails that weren't sent yet are now resent automatically.

Display nice error message in case of path too long

In a few cases, an error might happen when creating a page, if its full path is too long. The full path is defined by the title of the page and the title of all parent pages. We now provide an UI for this error to explain what happens: the fix is generally to reduce the size of the title of the page, or to put it under another hierarchy. 

Get all org.xwiki* distributions

The graphs now matches all org.xwiki* distributions (used to only match XWiki Enterprise). Before, we were filtering on the org.xwiki.platform:xwiki-platform-web distribution id but since we now send the packaging used in the distribution id property, we needed to find a way to list all distributions done by the XWiki open source project.

HTML 5 support in the rendered differences

The rendered differences between different revisions of a page now correctly display HTML 5 tags like figures and captions for changed content. This is in particular relevant with the new figure caption support but can also be good for custom HTML that includes tags not supported by HTML 4.

Metadata are rendered in Annotated XHTML

Metadata provided in the page structure (XDOM) are now output when using the Annotated XHTML renderer.

The administration right buttons now have a proper text alternative. It can be displayed on hover.

Improved Less SSX Caching

When writing a SSX using LESS, the SSX request parameters are now taken into account for caching the results of the LESS compilation output.

Breadcrumbs on Copy, Delete and Rename Operations

When a delete, copy or rename operation is started or its progress is displayed, the breadcrumbs are now visible at the top of the page. This makes it easier to navigate from a deleted, copied or renamed page.

The Active Installs pings are now sent over HTTP using a User Agent of XWikiActiveInstalls. This is important since some servers (such as CloudFlare) consider requests that don't have a User Agent set as being "spammy" request and blocks them. This makes the Active Installs ping module a better citizen.

Document index can be sorted by title

The main document index (and also the children/siblings of a page) can now be filtered and sorted by title. In previous versions this was not the case, because filtering and searching happens on the values stored in the database, which can be different from the displayed title.

While this obstacle has not been overcome now pages which have a displayed title which is different from the title stored in the database are now marked with the symbol "1". If these pages are found in the result set, a note is displayed explaining why filtering and sorting might not work as expected for these pages. 

Realtime Inplace Editing

The In-place WYSIWYG edit mode now supports real-time collaboration. This feature is experimental so it is disabled by default. If you want to try it out just ask your administrator to enable the "xwiki-realtime" CKEditor plugin from the CKEditor administration section.

An InstanceId converter has been added so that it's now possible to convert from String to InstanceId and vice versa (useful for Velocity scripts needing to call an API that accepts an InstanceId object for example).

Extension plan in isolation

It's now much easier to run extension jobs isolated from the current instance. The following two new properties has been added to ExtensionRequest:

  • coreExtensionRepository: a custom repository to use to find available core extension
  • installedIgnored: true if already-installed extensions should not be taken into account while resolving the install plan

No longer committing XML document date fields

Our maven XAR plugin's xar:verify goal will now fail the build if the XAR module contains XML pages with date fields in them. To clear them automatically, just use xar:format which was also updated to remove such fields. This behavior can be skipped for individual files or for the entire project. See the documentation for more details.

PDF Export Application Improvements

The PDF Export Application (which is still experimental and not bundled in XWiki Standard) has a couple of improvements:

  • The user's own web browser is now used by default to generate the PDF, but the application can still be configured to use a remote Chrome instance or one that runs inside a Docker container. Check out the migration section below for more information.
  • When a remote (or Docker based) Chrome instance is used for PDF printing the application now checks if connection is working before showing the PDF export options. An error message is shown in case the Chrome browser can't be accessed.
  • In case of PDF export failure, the last error message from the PDF export job log is now displayed.
  • The underlying JavaScript library used for paginating the content before printing to PDF (PagedJS) has been upgraded to its latest version.

It's now possible to directly create a pre-configured mail Session. See Mail Sender API.

Suggestions for the wiki macro parameter type

It's now easier to decide what value to set in the wiki macro parameter type as suggestions are proposed: "Unknown" (the default), and "Wiki" for a parameter containing wiki markup. It's still possible to explicitly set the Java type to use.

Bypass log grabbing

It's now possible to force a log to end up in the main log even when during a job that is supposed to grab it.

Added accessibility test overview

Now, builds with the property xwiki.test.ui.wcag property activated will create overview reports of the accessibility results. These reports will generate whatever the results are, and will contain statistics about the tests in the test suite.

ClassLoader name

The ClassLoaders associated to namespace are now implementing ClassLoader#getName() so you don't need to cast it to NamespaceURLClassLoader to access the namespace anymore.

Changes to "Own Event" and "System Event" notification filters

The "Own Event" and "System Event" notification filters are not blocking anymore the notifications that target explicitly the user. See the Notification Application documentation for more information about these filters.

Document restoration events

It's now possible to be notified when a document is restored from the recycle bin using the events org.xwiki.bridge.event.DocumentRestoringEvent and org.xwiki.bridge.event.DocumentRestoredEvent. See Model Bridge API for more details.

Disabling lightbox for specific content

The image lightbox feature can now be disabled for an element and its children by adding xwiki-lightbox=false to the parent of the excluded content. This can be used by macros or extensions rendering images as part of the page content so that these images don't appear in the lightbox view.

Layout Macro Category

A new Layout Macro category was added and the following macros were moved to it: Dashboard, Container and Gallery.

Logging Administration uses Live Data Macro

The Logging Administration section is now using the new Live Data macro to list the available loggers, instead of the old live table.

The Velocity #try() directive now accepts an optional parameter to specify the name of a Velocity variable into which to save the caught exception. For example:

{{velocity}}
#try("myexception")
$services.query.xwql("zzzzz").execute()
#end

#if ($myexception != '')
  ... do something...
#end
{{/velocity}}

Improved Macro picker for "not installed" macros

The WYSIWYG editor allows selecting not yet installed macros in the macros picker, but it was missing some usability information. You now see which recommended extensions a macro belong to, and you get a more explicit warning about what will happen when you select such macros.

The macro parameter modal now behaves like a regular form. It now accepts implicit form submission: it can be submitted by pressing enter after filling up a parameter. More information in the documentation.

Replacing Macros

It is now easier to write a rendering macro that replaces itself by another macro. This is useful to, e.g., replace an old legacy macro by a new macro. While this was possible before, it required a little undocumented hack. You can find more in the updated documentation that now documents both the possibility in general and also the hack that makes it possible to use this feature already in older versions of XWiki.

More consistent menu icons

Updated class and object edit menu icons to make them more consistent with other places like the document tree viewer. The missing Annotations menu icon was also added.

Users can be filtered based on first name and last name in the rights UI

The rights UI now allows filtering based on the user first name last name and username. This is particularily helpful in cases where usernames do not contain any character from the user first name or last name (for example, uuid-based usernames).

Add original metadata author to XWikiDocument

A new concept of author has been introduced and the way authors are managed in XWikiDocument have been refactored to rely on a unique interface DocumentAuthors.

We now distinguish 4 different kind of authors information:

  • the creator: there's no ambiguity it's the user who created the document
  • the content author: it's the author who performed a change in the content of the document, by opposition with changing a metadata of the document such as an xobject, or an attachment. We distinguish it for security reason since the content of the document might contain scripts that are executed when viewing the document
  • the effective metadata author: it's the author which has been used to save any change in the document, content or not. So changing the content of the document will update both this author, and the content author. However, updating an attachment of a document will only update this author, not the content author. 
  • the original metadata author: it's finally the author you see displayed in the interface, it's most of the time the same as the effective metadata author but in some usecases it might be different. For example when a script wants to allow a user to perform a save without changing the effective author for security reasons, but wants to display the author who actually triggers the save.

Only the original metadata author has been introduced in this release, but all authors have been renamed and now relies on UserReference.

Checksum policy for Maven repositories

It's now possible to control in xwiki.properties file the behavior of each Maven repository handler regarding failing checksum validation. The default is warn.

Execute Macros in context of another page

The Context Macro now supports executing macros in the context of the referenced document by using the new transformationContext parameter.

For example the following content generates the screenshot:

{{context document="Sandbox.WebHome" transformationContext="document"}}
{{toc/}}
{{/context}}

Security Vulnerabilities name display

The display of the extension names on the extension security vulnerabilities is now improved to take into account the limited horizontal space of the administration.

Byte array to InputSource

The org.xwiki.filter.input.InputSource converter now support byte[] as input.

Export Target XWiki Version

The Export administration section has a new option named "Target XWiki version" that is useful if you need to generate a XAR that is compatible with an older version of XWiki. For instance, if you need to import the generated XAR in an XWiki version older than 12.0 then you should set "Target XWiki version" to "Below 12.0".

Add some missing CSS class iD : for "children", "comments", "attachments", "history" and "information" menu entries of flamingo flavor like the others menu entries.

The Message Stream Application is now disabled by default and needs to be enabled to activate the feature. This was chosen in order to not clutter the UI by default, considering that not all users would need this feature. In the future, it should be moved as an optional extension to install.

New API to safely evaluate XObject properties

A new API to provide safe evaluation of XObject properties has been introduced to allow developers to control which properties from which XClasses should be evaluable, and how they should be evaluated. For XObjects that have assigned evaluators, the evaluated properties can be recovered in scripts through the new evaluate() method.

Admin user as a Simple user

When using the Jetty/HSQLDB demo packaging, the Admin user used to be an Advanced user, and this was troubling for users discovering XWiki since they were seing advanced features from the onset. The Admin user is now a Simple user, matching what you get in other packagings in which the admin user is created in the Distribution Wizard when XWiki is executed the first time.

Breadcrumbs in the notifications email

The notification emails now display breadcrumbs for each page-related change, providing a better understanding of the locations of these pages in the wiki.

Mail Deletion

It's now possible to delete a single mail from the Admin UI, by clicking on the "Delete" button next to the mail in the Mail Status screen.

User Authentication Event

The classic Form and Basic Authentication mechanisms now trigger a UserAuthenticatedEvent event whenever a user is authenticated. As a new best practice, custom authenticator authors are advised to implement this new event.

(X)HTML 5 parsers added

Two new parsers for HTML 5 and XHTML 5 have been added to the XWiki rendering framework. They are largely based on the existing parser for XHTML 1.0 but support <figure> and <figcaption> tags. The former is based on the latter, but passes the given HTML code to the HTML cleaner first to obtain valid XML. These parsers are the basis for the new HTML 5 support in the WYSIWYG editor but can also be used in other contexts to convert HTML 5 to XDOM, e.g., in the context of an importer.

Localization API

We added two methods to the LocalizationManager:

  • a helper method to search for a given translation key in the specified locale and to render it as plain text:
    String getTranslationPlain(String key, Locale locale, Object... parameters)
  • a method to get the configured default locale:
    Locale getDefaultLocale()

The first one was already available in the script service (under a different name: $services.localization.render()), so we exposed the second one too:

$services.localization.defaultLocale

Checkout the Localization Module documentation for more information.

Provide Raw content filtering mechanism for macros

A new rendering transformation component is now provided for macros to allow perform filtering of RawBlocks. A new API is provided, RawBlockFilter, with a first implementation for HTML raw blocks, used in html macro.

New script service for HTML operations

A new HTML script service has been introduced allowing to use the recently introduced HTMLElementSanitizer in scripts. It can be used in velocity with $services.html.xxx.

Document default locale

Added a script API to set the document default locale

Features of distribution are now sent by active install. This allows to have statistics on the various types of packagings that are used (ZIP packaging, DEB packaging, EXE packaging, etc).

PDF Export Limits

The PDF Export Application can now be configured to:

  • limit the amount of content that can be included in a single PDF export; this can be done either from the PDF Export wiki administration section using the "Maximum content size" property or, globally, from xwiki.properties
    # [Since 14.10]
    # The maximum content size, in kilobytes (KB), an user is allowed to export to PDF; in order to compute the content size
    # we sum the size of the HTML rendering for each of the XWiki documents included in the export; the size of external
    # resources, such as images, style sheets, JavaScript code is not taken into account; 0 means no limit;
    export.pdf.maxContentSize=100
  • limit the number of PDF exports that can be done in parallel; this can be specified only globally, from xwiki.properties
    # [Since 14.10]
    # The maximum number of PDF exports that can be executed in parallel (each PDF export needs a separate thread).
    export.pdf.threadPoolSize=3

SuperAdmin sees hidden pages

The Super Admin user now sees hidden pages.

Provide a way to list the categories of a macro

The MacroCategoryManager from Rendering Macro Transformation provides a getMacroCategories operation that takes a MacroId object and return the set of categories of the macro. The default implementation takes into account the macro categories overriding that can be done in xwiki.properties.

Live Data performance improvements

The rendering time of the Live Data Macro has been improved. The performance is now comparable to the Livetable Macro.

For instance, taking the loading time of the Panels table with 30 rows, the rendering time is now of 2s 180ms with the optimization, and was 3s 50ms before the optimizations, and 2s 250ms with the Livetable Macro. In addition, when the Less style is not yet cached, the rendering time is improved by about 12 seconds.

Extension Search Button

Added a search button on the Extension Manager pages in the Administration, to make it more user-friendly (users had to press the "return" key before).

Component role type priority

It's now possible to indicate the priority of a component among its role type siblings when it's retrieved through APIs like ComponentManager#getInstanceList and ComponentManager#getInstanceMap. In a Java component declaration, this is done through the standard javax.annotation.Priority annotation.

Note that component priority can also be used to sort event listeners.

Encoding parameter for RSS Macro

The RSS Macro now supports an optional parameter named encoding that allows forcing an encoding to use when reading the RSS feed. To be used for cases when the guessed encoding is not correct. Example:

{{rss feed="..." encoding="UTF-8"/}}

Improved contrast of the metadata display on the change viewer.

PDF Export Size Limit

The default PDF export size limit has been increased from 100KB to 5MB and is now applied only when exporting multiple wiki pages. Checkout the PDF Export Application documentation for more information.

Added keyboard support for the rich select used to pick a page template at page creation.

Icon REST API

The Icon Theme Application is now providing a REST API. This API allows to request the icons metadata of the provided icon themes.

For instance:

# Request two icons from the current theme:
curl -H 'Accept: application/json' http://localhost:8080/xwiki/rest/wikis/xwiki/iconThemes/icons?name=add&name=home
# # {"icons":[{"name":"add","iconSetType":"FONT","iconSetName":"Font Awesome","cssClass":"fa fa-plus","url":null},{"name":"home","iconSetType":"FONT","iconSetName":"Font Awesome","cssClass":"fa fa-home","url":null}],"missingIcons":[]}

View Likes in viewers menu section

The menu item for viewing Likes information has been moved to Viewers sub-section of the other options menu, for consistency.

Ability to inject content in the HTML header

It is now possible to inject content dynamically in the "head" tag of the HTML pages via a dedicated extension point named org.xwiki.platform.head. It is useful typically for adding metadata to the pages. Checkout the extension point documentation for more information and an example.

Contains queries for events

The SimpleEventQuery in the Event Stream Module now also support querying for text that is contained anywhere in a field.

Automatically generated anchors for images

XWiki now automatically generates anchors (ids) for images as it does for heading. This makes it easier to, e.g., reference images using the Reference Macro. Automatically generated ids can be overridden by manually setting the image's id parameter.

Orphaned Pages list

The list of Orphaned Pages of the Index Application is now displayed using the Live Data Macro.

Inline template execution

It's now possible to execute a template inline. There was nothing previously in the TemplateManager to indicate that the template was meant to be inserted in an inline content, and it was not really working properly for the template macro. See Template Module for more details on how to use the TemplateManager.

The administration rights interface now uses buttons with up to date icons instead of skeuomorphic images.

Icon update for the object and class editors

The object and class edit modes available to advanced users now use the icons from the current icon theme.

Note that the class edit mode contains a number of icons from Silk to represent UI components. Those icons are nowhere near any icon available in other icon themes, so they were not changed here.

Improved caching of pages content and title

The title of pages title and content is now cached, this should lead to performance improvement after the first rendering of pages. No performance measurements are currently available.

Improved contrast of the autosave text when disabled.

Extension Manager UI improvements

The more advanced search features of the Extension Manager are now hidden under a More button by default and more explanation was added to the shown informations.

#displayUser and #displayGroup now allow displaying a link to the profile

The standard velocity macros #displayUser and #displayGroup can now be configured to display a link to the user or group profile with the parameter displayLink. The parameter defaults to true.

Notifications for comments

A notification is now displayed when a comment is posted on a page (if you enable it in your settings).

JAX-RS 2.1 support

XWiki now supports JAX-RS 2.1. The implementation relies on Jersey 2, which replaces Restlet that was used for JAX-RS 1.

See the Backward Compatibility section for the related breaking changes.

Syntax Registry

There's now the concept of a Syntax Registry and new Syntaxes are expected to register themselves in that registry

You can list all registered syntaxes using:

@Inject
private SyntaxRegistry registry;
...
List<Syntax> syntaxes = registry.getSyntaxes();

You can also get a Syntax object from a Syntax id string using (for example):

@Inject
private SyntaxRegistry registry;
...
Optional<Syntax> syntax = registry.getSyntax("xwiki/2.1");

See available Syntaxes for more.

Enable the lightbox view for images by default

The lighbox feature is now enabled by default.

Clickable versions in the changes view

When viewing the changes introduced between 2 document versions (diff), the compared versions are now clickable so that the document can be viewed at those specific revisions.

Hidden macro categories API

The MacroCategoryManager role gives access to the list of hidden macro categories.

@Role
public interface MacroCategoryManager
{
   // [...]

   /**
     * @return the set of hidden categories (e.g., "Deprecated, Internal")
     * @since 14.8RC1
     */

   @Unstable
   default Set<String> getHiddenCategories()
   {
       return Set.of();
   }
}

Improved Database List Field

The Database List field that you can use when creating an application with AppWithinMinutes has been improved. It is now displayed by default using an input suggest picker that adapts to single and multiple selection. You can still change the display type if you want. If you choose the "Select" display type then you can also control its size.

Improved contrast on default table borders

The previous style could get difficult to see for low vision users. The new color follows the color theme used on the page and it will meet standard contrast requirements given you use a color theme that respects those requirements, such as Iceberg.

Display image ids in the Lightbox

Users can now copy to the image ID (which is either manually added using the Id Macro, or automatically generated) to clipboard from the lightbox menu or from the image toolbar, without the need to open the lightbox. From the image toolbar, users can also get the direct link to the image, which can then be shared easily.

Common User Name Differentiator

The user picker can now be configured to show additional information about the listed users (e.g. the user address or user position within the organisation) in order to help you distinguish between users with similar names. Check out the User Module documentation for more information.

Finer configuration of the "can skip the recycle bin" feature

Allowing Advanced user to skip the recycle bin can now be configured on three locations:

  • In the global administration of the current wiki
  • In the global administration of the main wiki
  • In xwiki.properties (see the property details below)

If the default value is found on one location, the next one is tried. If no value is found, the recycle bin skipping is not activated.

Details of the configuration on xwiki.properties:

#-# [Since 12.9RC1]
#-# Indicates whether skipping the recycle bin when deleting pages is allowed for Advanced users.
#-# It is disabled by default.
#-# This setting is only used if the wiki has a recycle bin activated (xwiki.recyclebin=1 in xwiki.cfg).
#-# This setting can be overloaded:
#-# * By the main wiki in the Refactoring.Code.RefactoringConfigurationClass class of the
#-#   Refactoring.Code.RefactoringConfiguration document of the main wiki.
#-# * By sub-wikis in the Refactoring.Code.RefactoringConfigurationClass class of the
#-#   Refactoring.Code.RefactoringConfiguration document of the sub-wikis (itself overloading the main wiki's
#-#   configuration).
#-#
#-# The default value is:
# refactoring.isRecycleBinSkippingActivated = false

HTML 5 support in the WYSIWYG editor

The WYSIWYG Editor Module now uses HTML 5. See below for additional notes on backwards-compatibility. Not all HTML 5 features are supported, yet, the main new feature is support for parsing figures with captions. There should be a closer match between the HTML code in the editor and the HTML code in view mode but this might require adaptations for WYSIWYG editors and extensions extending them. This has also consequences for renderers that should handle figure and figure caption events not just in macro contexts (due to the figure macro).

DefaultReaderInputSource and DefaultWriterOutputTarget now support closing the wrapped Reader/Writer.

Improved the visibility of the focus state of the "Create", "Edit" and "more actions" buttons found on the top right of every page content.

Change viewer UI update

Improved the layout and added icons in the version comparison UI.

Mail Address Conversion

There's now a Converter to convert from a String to an InternetAddress and vice versa. It's especially important since we've modified the User API's get/setEmail() to use an InternetAddress. This allows using Velocity scripts that call APIs accepting an InternetAddress by passing a string. For example:

$services.user.properties.setEmail("[email protected]")

Menus list

The list of menus of the Menu Application is now displayed using the Live Data Macro.

Mail Resender

XWiki can be configured to not resend failed emails at restart (it does by default).

CSS3.0 parsing support

On some cases, CSS parsing is required server-side. Previously, on CSS 2.1 was supported. This is for instance used for image styles parsing.

Response implementations can now be marked as redirectable

A Response implementation can now implement the decorator RedirectResponse in order to be marked as "redirectable" (being able to send HTTP redirections to the client).

For more informations, please check out the Container Module documentation.

The component NamespaceContextExecutor has been introduced to be able to execute some code in the context of a different namespace (e.g. in a different wiki).

Additional information when a delete operation fails

When an error happens while deleting a page, detailed information are displayed to help understand the problem.

Request Effective Author

Before this version, when a request was received by XWiki, the currently authenticated user was considered to be responsible (regarding access rights) for the submitted data and the effects of the request. This made sense most of the time, but there were cases when the current user was not the only author of the request data so giving full responsibility to the current user wasn't ideal.

Starting with this version we introduce the concept of "request effective author". By default, the currently authenticated user is the request effective author, but XWiki extensions can overwrite this based on the request data and their own logic by setting a UserReference as the value of a request attribute named com.xpn.xwiki.web.XWikiRequest#effectiveAuthor. The only XWiki extension that does this at the moment is the realtime WYSIWYG editor, which sets the request effective author to the user with the least script access rights that has made changes in the realtime session that sent the request.

We also added a new method XWikiRequest#getEffectiveAuthor() to expose the request effective author. This is used for instance by the Save action to set the effective metadata author of the saved XWiki document. This means that even though the current user will continue to appear in the document history as the one that saved the document, the actual user that is used to check access rights when rendering that document (e.g. when executing script macros such as Velocity) could be different.

Siblings list

The list of siblings of a Page are now displayed using the Live Data Macro.

Java API to delete a range of versions

Exposed a Java API to delete a range of versions and used it inside DeleteVersionsAction.

Exclude Heading in Include/Display Macros

It's now possible to exclude the heading from an included page for both Include and Display macros, if the first element of that page is a heading.

HTML 5 support in the HTML Macro

The HTML macro supports HTML 5 and switches to HTML 5 whenever the content is output as HTML 5. This means that in most cases (for example, when using the default Flamingo Skin), the HTML macro can be used to insert new HTML tags like the <video>-tag into the content of a page while having the clean-parameter enabled.

A new "instance" ScriptService has been introduced with an API to get the XWiki instance id. New methods will be added if needed. See Instance Module extension for more details.

Copy / Rename Events

The refactoring module introduces dedicated events for document copy and rename operations. Checkout the documentation for more information.

Data Types

The list of data types (classes) of the XClass Application is now displayed using the Live Data Macro.

InputSource and OutputTarget converter improvements

The InputSource and OutputTarget converters used for example during macros and filters UI are now extensible so any extension can add support for supporting conversion from more Java types and support for more references prefixes. See Filter Module for more details

Syntax Variants

A Rendering Syntax Type can now have "variants" which represent variations of the base syntax. For example markdown+github is the GitHub-Flavored Markdown Syntax, markdown+commonmark is the CommonMark Markdown Syntax, etc. It used to be a best practice to use the + character to separate variants. It's now official and part of the API with some constructors and getters. For example:

SyntaxType syntaxType = new SyntaxType("id", Arrays.asList("variant1", "variant2"), "name");
assertThat(syntaxType.getVariants(), contains("variant1", "variant2"));

REST Resource to Retrieve Property Values

A new REST resource is available to retrieve the list of values of an XWiki class property. It currently works only with Database List (DBList) properties but we plan to add support for List of Users properties soon. The main use case for this new resource is to provide suggestions when editing object properties. See the REST API documentation for more details.

The tabulator order in the page creation Location breadcrumb now matches the visuals, going from left to right as expected.

Available macros sorted by id

The available macros list is now sorted by ascending macro ids.

The default value of xwiki.users.initialGroups now depends on xwiki.authentication.group.allgroupimplicit value (users are not added to XWikiAllGroup anymore when xwiki.authentication.group.allgroupimplicit is enabled).

Block not allowed macro install

The Install button is disabled for user who don't have the right to install a macro in the WYSIWYG macro picker.

Advanced macro parameters shown last

When inserting a macro from the WYSIWYG editor the advanced macro parameters are shown at the end, most of the time hidden under the "More" link in order to simplify the UI. An advanced macro parameter might be shown at the top if it has a value set (when editing a macro).

Multilists are filterable

We can now filter multiselect lists.

Remove XWikiUser disabled property and introduce email_checked property

We introduced in XWiki 11.6RC1 a new property on XWikiUsers objects called disabled to allow to disable or enable users. This property was however redundant with the previously existing active property, which was until then only used to check if users validated their email account, when the linked registration option was activated. 

In this release, we remove the disabled property and rely entirely on the active property to know if a user account is enabled or not. We introduced a new email_checked property to verify if a user validated his/her email address if the option was activated. 

Injected extension repositories can now be associated with a priority

Ratings Stars Improvement

Improved the way ratings stars are displayed by removing the white background from picture.

Show subwiki on mention notifications

The mention subwiki is now shown in the mention notification message if the mention comes from a subwiki different from the one the user is currently in.

In-place editing supports creating objects

The in-place editor for object properties now also supports creating objects by specifying data-object-policy="updateOrCreate" in the <dt>-tag. The also-introduced velocity macro #createObjectAndPropertyIfMissing allows to (temporarily) add an object and a property to the current document using a reference to the property like "Some.UsefulClass[5].status" which is useful for displaying the default value of the property when the object doesn't exist in the document. This can be used to introduce new properties in a docextra tab, see this example.

Support for native rendering of formulas in SVG

It is now possible to render formulas in SVG using the native formula renderer. This will provide more crisp results, which can easily be resized at will. See the Formula Macro documentation to learn more.

Execute JavaScript Inside Editing Area

The CKEditor has a new configuration option to enable the loading of the JavaScript Skin Extensions inside the editing area. This can improve the way macros are displayed inside the editor, if they require JavaScript, but it has some downsides. Check the CKEditor Integration documentation for more information.

Improved explanation when creating a translation page

When editing a wiki page in-place you might have seen a "Translate" button if the edited page was missing a translation for the current locale. It wasn't obvious what this button does and the small notification message shown at the bottom of the page was hardly noticeable so we replaced it with a popover that is shown first when you enter edit mode and then whenever you hover the button. We also replaced the notification shown after clicking on the "Translate" button (to create the translation) with a popover on the page title input to invite you to translate the page title.

Improved display when there is no entry

A message is now displayed when there is not entries to be displayed in a Live Data.

Live Data events

While Live Data always triggered some events in the browser, they were so far only usable internally as they were triggered on a detached element. This has been fixed and a new instanceCreated event has been added that is triggered just after a new instance has been created.

Possibility to disable the fullscreen behaviour on textarea

Until now a "maximize" link was automatically added to any textarea added to a page when viewing it in an editor. This can be now disabled by using the CSS class not-maximizable on the textarea. 

Create Template Provider from the Class UI

Until now, the place to create a template provider was Administration->Content->Page Templates and most of the time the need was to work together with a template created for a class. It is possible now to create the template provider from the class UI, just as the sheet and template are created. The only condition is to first create the template, in order to use it (otherwise it doesn't make sense to have a template provider for the class).

Provide a script service API for serializing a UserReference

It is possible to serialize a user reference with the default serializer using the user script service:

{{velocity}}
#set ($userReference = $api.returning.user)
Retrieved user: $services.user.serialize($userReference)
{{/velocity}}

Navigation in the changes view

Arrows have been added to easily navigate between changes of a document.

Improved Jump to Page

The Jump to Page modal (Ctrl+G) has been updated to use the new page picker which fixes the keyboard navigation and improves the display of page suggestions (page title and location are now shown).

Delete all mails

There's now a script API to delete all messages having a status in the database and their serialized messages on the file system.

More locale-oriented APIs

We deprecated Document#getTranslationList() in favor of the new Document#getTranslationLocales() so if you have Velocity scripts using $doc.translationList you'll notice a deprecation warning in the server logs which you can avoid by using $doc.translationLocales instead.

We also added XWiki#getAvailableLocales() so you can now replace

$xwiki.getXWikiPreference('languages').split('\s*[|, ]\s*')

with $xwiki.availableLocales in your Velocity scripts.

Active Installs displays Distribution Graph

The Active Install application now displays a graph showing what packagings users have used to install XWiki (Debian, WAR, HSQLDB/Jetty, etc). You can see it live on xwiki.org.

Empty Content Placeholder in WYSIWYG Editor

The WYSIWYG Editor shows a placeholder text when the edited content is empty and the text area is not focused. See the CKEditor Integration documentation for more information.

Replace the Livetable from the attachments tab with a LiveData

The attachments Livetable was updated to use the new LiveData.

The displayUser velocity macro has a new structure. It now includes the user avatar inside of the username element instead of them being siblings. It's especially useful for anchor usernames.

Empty Line Placeholder

A placeholder text is now displayed on currently focused empty lines. By default it indicates the type of content block that holds the caret (e.g. paragraph, heading, list item, etc.), but it could also show tips on how to use the editor in that particular context. This is for instance used to advertise the Quick Actions shortcut (slash). Checkout the CKEditor Integration documentation for more information.

New experimental event store

A new Solr based event store has been introduced. It's still disabled by default (will be enabled as soon as the user notification use case is fully refactored to use it) and meant to be used more and more to replace the current Hibernate based event and event status store.

Macro Category Count

When inserting a macro through the WYSIWYG Editor the macro selector now shows the number of macros available in each category.

Class Sheet

The list of existing pages with objects described by a class that is provided by the XClass Application as part of the default class sheet is now displayed using the Live Data Macro.

New script service for HTML operations

A new HTML script service has been introduced allowing to use the recently introduced HTMLElementSanitizer in scripts. It can be used in velocity with $services.html.xxx.

Extension previous identifiers

It's now possible to explicitly indicate a list of previous identifier (or an empty list) if you don't want to import all the features along with the extension in the Repository Application. See Maven for more details.

Active Installs now sends java specification version

The Active Installs now sends the java specification version in its pings to extension.xwiki.org.
See the documentation of the active installs for more informations.

Paragraph edition contrast

Improved the contrast of the paragraph edition button.

Toggle Rendered Diff Context

You can now use the "Show context" toggle button to show / hide all the unmodified parts of the page rendered content when comparing two versions of a wiki page from its history. Check the user guide for more information.

DocumentVersionReference is part of the model API

The DocumentVersionReference is now part of the model API: this reference API allows to manipulate a DocumentReference with a specific version attribute, allowing to specifically target a version of the document.

Add parameters to the CKEditor html conversion request

A new xwiki:ckeditor:convertHTML event is send before a request to convert some content to HTML is sent by CKEditor. Listeners can add new request parameters by add properties on the data object send with the event. The example below show how to add an example parameter with value 1.

$(document).on('xwiki:ckeditor:convertHTML', function(event, data) {
    data.example = 1;
});

Notifications are loaded on demand

To speed up page rendering, we load the content of the notifications only when the user opens the notifications menu (lazy-loading).

During the load of the content, the user will see a spinning whee as on the following picture.

In addition, we now display 10 notifications instead of 5.

New Recycle Bin API methods for batch operations

Added new methods that allow setting a batch ID to a deleted document and retrieving deleted documents for a given batch.

In notification emails the breadcrumb displaying a page position do not contain an ellipsis anymore, the whole breadcrumb is shown.

Main wiki descriptor used in path based mode

The main wiki descriptor is now also used to find out the the protocol, the domain and the port to use when generating an URL in path based mode in a background thread (typically the mails).

Removed the log-in button when guest users comment.

Allow to chose conflict fallback version when merging

The storage merge API have been improved in order to allow consumers of the API to define what should be the fallback versions to use in case of merging conflicts: by default the version is still the current version element, but it's now also possible to chose the next version element.

Attachments content

It's now possible to indicate in input the list of attachment for which the content should be taken into account (when serializing a document, for example). It used to be all (generally used when exporting a XAR) or nothing (in the case of the document history).

Pre-edit check can be cached

When editing a page, once a pre-edit check result is presented to the user, it will not be presented again unless something changed. For instance, once a user chooses to edit a page owned by an extension, he or she will not be warned again. However, if a page is locked twice by different users, they will be warned at each edit attempt.

CKEditor Upgrade

The CKEditor has been upgraded from version 4.6.2 to 4.7.2. This brings a lot of bug fixes and some improvements:

  • select and manipulate arbitrary rectangular table fragments (a few cells, a row or a column)
  • paste from Microsoft Excel
  • improved paste from Word
  • new color picker

See the CKEditor release notes for more information.

Notifications Redesign

The start of a Notifications re-architecture has been started in order to improve performances. The current implementation is computing changes for a given user on the fly, when asked. This has the advantage of being very light to save new events but the computation is cost when displaying notifications (even though there's a cache). It doesn't scale well when there are a lot of events and users. Thus we've started a redesign where we compute and store the notifications for each user, when a new event is triggered.

To enable the new feature, edit your xwiki.properties file and set the notifications.eventPreFilteringEnabled property to true.

This feature is currently EXPERIMENTAL and should not be tried in production.

#-# [Since 12.1] [Experimental]
#-# Enabling this option will make user notifications be filtered and stored when the event is generated
#-# instead of filtered each time they are displayed.
#-#
#-# The default is :
# notifications.eventPreFilteringEnabled = false

New API for macro required rights analyzers

A new API for required rights analyzers for macros has been introduced that makes it simpler to introduce a required rights analyzer for a macro. Such an analyzer is necessary for all macros that support wiki syntax outside the content (e.g., in a parameter) or any kind of script or other content that uses the author's rights.

Figure Type Identification

A data-xwiki-rendering-figure-type property is added to the rendered figures macro. Its value is table if the figure contains a single table, and figure otherwise.

Anchor in EntityResourceReference

The anchor metadata has been added to EntityResourceReference, to align it with other entity reference-related APIs. The general goal is to be able to support anchors (a.k.a URL fragments) in references to resources.

SuperAdmin and Guest configuration

The configuration properties for the Guest and SuperaAdmin virtual users can now be overridden. This is achieved by modifying the xwiki.properties file.

For example:

user.preferences.superadmin.editor = Wysiwyg
user.preferences.guest.editor = Text
user.preferences.guest.displayHiddenDocuments = 1

Extension Manager improvements

Extension Manager now gives a chance to users requesting it in their profile configure default conflict resolution behavior at the beginning of the install/upgrade/uninstall.

Notifications can be disabled with a property in xwiki.properties.

Filters for Static List properties in Live Data

The suggestions in the Live Data Macro's column filters now display labels or translations (if there are any) of the values of Static List properties instead of the plain values. The search for suggestions considers both the displayed label and the underlying value.

The rights livetables display user first name and last name

User first name and last name are now displayed in the rights UI using the standard user and group displayers.

Refactored notifications module

For this release, we refactored the xwiki-platform-notifications modules by splitting it into multiple submodules. Some young APIs have been moved to sub packages.

See XWIKI-14575.

Allow to recompute average ratings from script service

A new API methods has been added in Ratings script service to allow computing back the average ratings when needed.

The signature of the method is the following:

    /**
     * Recompute the average rating of a reference.
     * Note that this method can be resource consuming if the set of data is large.
     *
     * @param reference the reference for which to recompute the average ratings.
     * @return the average rating in an optional or an empty optional in case of error.
     * @since 13.7RC1
     * @since 13.4.3
     * @since 12.10.9
     */

    @Unstable
    @Programming
   Optional<AverageRating> recomputeAverageRating(EntityReference reference)

Block not allowed macro install

The Install button is disabled for user who don't have the right to install a macro in the WYSIWYG macro picker.

The tables that contain notification preferences in the user profile now follow the colors from the current Color Theme as expected.

Improvements when viewing a document version

When viewing a document revision (other than the last one), we're now showing the version information in the "last modified" section. Also, the "More actions" options are now displayed and the "view source" option will work on the currently displayed revision (instead of working on the latest version). Read more about document versioning in the documentation.

Minor Job API improvement

Added a "canceled" flag to AbstractJobStatus to simplify writing cancelable jobs.

The content of 'doc.location' in Livetables is automatically set to HTML

The content of the 'doc.location' column in livetables is now automatically set to HTML, there is no need to add 'doc.location':{'html':true} to the $columnProperties of the livetable anymore.

Improved contrast for the "Decline" button in invitations.

Wikis lists

The lists of wikis and wiki templates of the Wiki Application are now displayed using the Live Data Macro.

It's now possible to change the socket and connection timeouts of a XWiki Repository in xwiki.properties. See XWiki Commons - Extension - Repository - XWiki.

URLTool improvement

A new toURL(String) has been added to the Velocity $urltool to convert a String to an URL object.

User profile Groups list

The list of groups of a user in the user profile is now displayed using the Live Data Macro.

History delete event

It's now possible to be notified when a range of document history versions is about to be deleted using the event org.xwiki.bridge.event.DocumentVersionRangeDeletingEvent. See Model Bridge API for more details.

Bulletproofed NumberProperty

NumberProperty now accept any kind of Number in input and will automatically convert it to the right type instead of crash at save.

Changing Page Syntax from Wiki Editor

Changing the page syntax from the Wiki Editor has suffered some updates:

  • the style of the syntax conversion confirmation modal has been improved to be consistent with the other modals we use in XWiki
  • the syntax conversion is not saved right away anymore but when you save the Wiki Editor; canceling the Wiki Editor will also cancel any unsaved syntax change
  • XWiki will warn you when the syntax conversion is not supported

Checkout the Page Editing documentation for additional information.

It's now possible to customize a Maven repository in xwiki.properties with any Aether property. See XWiki Commons - Extension - Repository - Maven.

Tour Application in platform

The Tour Application is now part of xwiki-platform and the contrib extension has been moved to the attic.

Inject extension features

It's possible to dynamically inject additional features to an extension when downloaded from a repository or a core extension. See Virtual extensions for more details.

Velocity AST caching

VelocityEngine API now expose helpers to much easier to compile and cache the Velocity AST.

Panels list

The list of Panels is now displayed using the Live Data Macro.

Dynamic registration of rendering listeners

It is now possible to declare a rendering listener dynamically from an extension.

A property converter was added for org.xwiki.component.namespace.Namespace. This means among other things that it can be used as Macro parameter and it's now supported by automatic method parameters conversion in Velocity.

XWiki Syntax 1.0 Removed

The XWiki Syntax 1.0 is no longer bundled by default. Its configuration has been removed from xwiki.cfg.

Allow to inject Javascript/CSS in Notification displayers

It is now possible to use the Skin Extension Plugin in the custom Notification displayers: this might allow to use custom javascript for the notifications.

Extension Manager improvements

Extension Manager now generate events just before starting to install/uninstall/upgrade an extension.

Limit parameter in tag cloud

The tag cloud macro supports a new parameter to limit the number of tags to the n most occurring tags.

Users and Groups migrated to Live Data

The tables used for the administation of users and groups and now migrated to Live Data.

The Dashboard Macro now only displays a Gadget if that gadget's content is not empty when rendered. This allows Gadgets to control whether they should be displayed or not. For example, if you wish to display a Gadget only if the user has some permissions such as Admin rights, you can do that with an if in the Gadget's content.

Refactored tips panel extension point

The tips panel extension point has been refactored to be safer and easier to use. See the "Add Tip to Tips Panel" extension point for more details on how to define a tip in 15.1+. Note that any custom tip you may have will continue to work as is, but we encourage you to move the tip definitions from the UIXP parameter to the UIXP content as the old way is now deprecated and will be removed one day (and it's also safer to use the new way).

Mentions explained on the tips

The use of the mentions in WYSIWYG editor autocompletion is now explained on the tips.

Mark the scripts that are safe to be executed inside the WYSIWYG editor

The WYSIWYG editor doesn't execute the JavaScript code inside the editing area by default. If you need this then you need to:

  • Enable the loading of the JavaScript Skin Extensions from the WYSIWYG editor administration section
  • Mark the scripts that are safe to be loaded inside the editing area:
    #set ($discard = $xwiki.jsx.use('Path.To.MyMacro', {'wysiwyg': true}))

Check the CKEditor Integration documentation for more information.

Support selecting and uploading SVG logos when editing a skin

Added support for uploading and selecting SVG images as logos when editing a skin. Previously, the attachment selector would not accept SVG files.

It's now possible to indicate flavors known to be incompatible with a distribution package. See Flavor Module for more details.

Likers migrated to Live Data

The list of likers of a page is now displayed using a Live Data.

JMX Monitor of Apache DBCP and Hibernate

JMX Monitoring of Apache DBCP and Hibernate are now enabled by default.

Tags are hidden when there are none

When there aren't any tags assigned to a page, the text “Tags:” is no longer displayed at the bottom of the page unless the user has edit rights.

Mail Resender Scheduler Job

It's now possible to run a Scheduler Job to resend automatically emails that were prepared successfully but that were not sent (for example if the XWiki JVM crashed before they could be sent).

VFS content type

It's now possible to explicitly indicate the Content-Type to return with the HTTP response containing the file. See VFS API for more details.

Debian packages now override standard configuration files handling for xwiki.cfg, xwiki.properties and web.xml to provide 3 ways merge with standard dpkg and apt command line tools.

More robust security cache

The security cache has been made robust against the disposal of structurally important entries by storing them also outside the cache as long as they're still needed by entries in the cache to avoid cascading disposal of large parts of the cache. If you've had problems with users seeing access denied sometimes, this might be the improvement you've been looking forward to. Also, if you've configured a very high size for the security cache to avoid these problems, it should be possible to reduce these limits now. The documentation provides some hints how to choose a reasonable security cache size. However, as with every change to code that is critical to performance and security, there is a risk for regressions even though we have extensive tests. In particular if you're maintaining a larger instance of XWiki, it is advised to monitor memory usage and performance after the upgrade to see if there are any irregularities. Also, please check that access restrictions are still working, in particular, if they involve nested groups. As always, please open a bug report or create a forum post if you're noticing anything unusual.

Comment form not displayed by default

The comment form is now hidden by default. This allows improving the loading performance of XWiki pages and makes the UI less cluttered.

A button allows you to display the comment form when you need to add a new comment.

User-scope translations require script right

Translations with user scope require script right now. A new configuration option allows disabling this check.

The Blog Category Panel now has an entry for All blog posts with a RSS feed for all.

New event query helper

SimpleEventQuery now have helpers to manipulate custom event properties. It's done by calling parameter() to "switch" the next comparison to be about custom parameters instead of standard Event fields. See Event Stream Module for more details.

More required rights analyzers

Even more required rights analyzers have been added in XWiki 15.10, now analyzing HTML Macros, translation documents, gadgets, icon sets, and configurable sections.

New Tip

New tip about x+x+x+a and x+x+x+h key combos.

Select the Wiki Home Page with the new Page Picker

The wiki descriptor administration section is now using the new page picker for the home page field.

The user notification filter preferences are now automatically updated when a watched page is moved/renamed.

User Avatar macro with user picker

When inserting the User Avatar macro from the WYSIWYG editor you can now select the target user with a user picker.

Most instances of stored ExtensionDependency, ExtensionAuthor, Version and VersionConstraint are now created through a factory to reduce duplicates in memory.

Enable Strict Mode for JSX

XWiki can now be configured to parse and minify wiki-based JavaScript skin extensions (JSX) using strict mode. This is disabled by default but you can enable it from xwiki.properties using:

skinx.jsStrictModeEnabled = true

Check the skin extension documentation for more information.

Tomcat 9 based Debian Package

Tomcat 9 is now the current stable branch of Tomcat so we provide a Debian Package of XWiki based on it.

New UIXP for the viewers menu section

A new UI Extension Point has been created to be able to extend the Viewers sub-menu of "other options" menu.

Forced default image style

The default image style can now be forced, meaning that it will be used by default and a style must be selected.

Maven "legacy" profile

The Extension Manager now automatically activates the legacy profile when reading a pom.

Live Data properties annotation

Live Data displayers have a new data-livedata-property-id property, containing the ID of the displayed property. This is useful to select the DOM element corresponding to a given property without relying on the structure of a given layout.

Block attributes

Rendering Blocks now have the concept of attributes. The main difference between Block parameters and block attributes is that attributes are not meant to be parser/serialized, the point is to use them as internal metadata associated to a block. The current main use case is to store the result of pre-executed macros.

Controlling Transformations

It's now possible to control exactly which Rendering Transformations to execute when viewing a page. For example to execute only the macro transformation: http://localhost:8080/xwiki/bin/view/Sandbox/WebHome?transformations=macro.

Common User Name Differentiator

It's now possible to configure an user property to be used as differentiator (hint) when displaying users in compact mode, in order to better identify users that have common or similar names. You can use an existing user property, like address, or a custom user property that you need to add first (e.g. the position inside the organization). This can be done from xwiki.properties file:

#-# [Since 14.10.12]
#-# [Since 15.5RC1]
#-# When displaying an user in a compact mode we usually rely only on the user avatar and their full name. If this is
#-# not enough to properly identify the user then this configuration can be used to display additional information.
#-#
#-# The name of the user property to be used as qualifier (hint) when displaying the user in a compact mode. This
#-# configuration is not set by default, which means no additional information is displayed:
# user.display.qualifierProperty =

For instance:

user.display.qualifierProperty = address

At the moment this configuration is taken into account only by the user picker, and is not set by default, meaning that we don't show any differentiator by default. Check out the User Module documentation for more information.

Line numbers in code macro

A new parameter has been introduced to enable line number display in the code macro. See Code Macro for more details.

Template Icons

When creating a new page, the Template Providers for specific applications can now add an icon and a description. We added new icons and descriptions for the Blog and Dashboard default templates. 

The Let's Encrypt root certificate is now automatically registered at runtime.

Fixed tabulator order for the quick search feature. Now only visible elements will get focus via keyboard.

Add a Solr store for ratings

It is now possible to store Ratings information in a Solr core: this should improve the scalability of the extension. Please note that the migration of data from one store to another is not yet supported.

The breadcrumb dropdowns can now be used with a keyboard.

Get Connected